Проверка подлинности клиента Tomcat с использованием SSL - PullRequest
6 голосов
/ 12 октября 2009

Я в растерянности, так как я не человек Tomcat. Мне нужно использовать сторонний веб-сервис, и они требуют аутентификации клиента через SSL, поэтому они сгенерировали и выдали мне сертификат SSL. К сожалению, это настолько, насколько они его поддерживают и не могут дать мне указания о том, как на самом деле использовать . Я застрял, используя эту третью сторону, поэтому, к сожалению, я вынужден мириться с их отсутствием поддержки.

Итак, у меня есть Java-приложение, которое нам поставляет поставщик (которому, очевидно, никогда не приходилось с этим сталкиваться), сервер приложений Tomcat, работающий на 6.0.20 в CentOS 5.3, и сертификат SSL от стороннего производителя. .

Что все, что мне нужно сделать на этом этапе? Все, что я могу найти в Интернете, это как настроить хранилище ключей, чтобы мое приложение могло использовать аутентификацию клиента по отношению к тем вещам, которые к нему подключаются, а не для случаев, когда ему нужно подключиться к кому-то еще, или как использовать SSL через порт 8443 (который я знаю как уже сделать и настроить).

Ответы [ 3 ]

3 голосов
/ 22 февраля 2016

Обновление:

Попробуйте следующий способ включить аутентификацию клиента в Tomcat.

Чтобы tomcat мог использовать преимущества аутентификации клиента, нам требуется три сертификата. То есть сертификат сервера для Tomcat, сертификат клиента для браузера и сертификат центра сертификации, который будет подписывать оба вышеупомянутых сертификата. Здесь я покажу, как это сделать в Windows.

Есть два пути.

1) У вас должен быть файл CSR, то есть запрос на подпись сертификата. Вы можете отправить его в центр сертификации, например Verisign или Comodo или многие другие подобные им. Они предоставят вам сертификат. Или

2) Вы можете создать свой собственный центр сертификации и подписать сертификаты. Но это рекомендуется делать только для личного использования.

У вас должны быть установлены Java и OpenSSL для выполнения следующих действий.

Для генерации запроса на подпись сертификата у вас должен быть ключ. Чтобы сгенерировать ключ, введите следующую команду в CMD.

openssl genrsa -out Serverkey.key 1024

При этом будет создан файл «Serverkey.key». Размер ключа 1024. Вы можете дать его согласно вашему требованию.

Теперь сгенерируйте файл CSR с помощью следующей команды.

openssl req -new -key Serverkey.key -out ServerReq.csr -config /path/to/openssl.cnf

Как только вы выполните эту команду, вас попросят дать некоторую информацию. После этого вы найдете файл CSR в вашем каталоге. Вы можете отправить этот файл в CA. В случае, если вы делаете это для своего личного использования, и вы хотите иметь свой собственный CA, создайте ключ и CSR для своего CA с помощью приведенных выше двух команд. После того, как у вас есть CSR для CA, вы можете подписать его ключом CA с помощью следующей команды.

openssl x509 -req -days 365 -in CAReq.csr -signkey CAKey.key -out CA.crt

Получив сертификат CA, вы можете использовать его для подписи других сертификатов.

openssl x509 -req -days 365 -CA CA.crt -CAkey CAKey.key -CAcreateserial -in ServerReq.csr -out Server.crt

Вы можете использовать ту же команду и для сертификата клиента.

Браузер, который является нашим клиентом здесь, примет сертификат формата P12. Формат P12 - это файл, который содержит ваш сертификат и ключ.

Чтобы преобразовать CRT в P12, используйте следующую команду.

openssl pkcs12 -export -in Server.crt -inkey ServerKey.key -chain -CAfile CA.crt -out ServerCert.p12

В tomcat есть одно хранилище доверенных сертификатов, которое будет иметь сертификат CA, а другое - хранилище ключей, которое будет иметь ключ и сертификат сервера (файл p12).

Для импорта сертификата ЦС в хранилище доверенных сертификатов используйте следующую команду.

keytool -import -alias CertAuth -keystore caCerts.jks -file CA.crt

Вы можете указать псевдоним как хотите. Запомните пароль, который вы задаете при запросе после выполнения вышеуказанной команды. Мы будем использовать этот пароль в файле server.xml. То же самое относится к приведенной ниже команде.

Для импорта сертификата формата p12 в хранилище ключей используйте следующую команду.

keytool -importkeystore -destkeystore tomcat.keystore -srckeystore -ServerCert.p12 -srcstoretype PKCS12 -alias 1

Теперь измените файл tomcat server.xml следующим образом.

<Connector port="8443" 
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           SSLEnabled="true" scheme="https" secure="true"
           truststoreFile="path/to/truststorefile" truststorePass="password" 
           keystoreFile="path/to/keystorefile" keystorePass="password"
           clientAuth="true" sslProtocol="TLS"
           />

Теперь импортируйте сертификат формата P12 клиента в браузер. Затем запустите сервер Tomcat и попробуйте получить доступ к https://localhost:8443.. Вы можете посетить блог для получения подробной версии этого ответа. Надеюсь, это поможет.

3 голосов
/ 12 октября 2009

Вот действительно длинный ответ: http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html

Не поверьте мне на слово, но я верю, что, как клиент, аутентификация клиента будет автоматически выполняться при запросе сервером.

Если вопрос настройки tomcat является вопросом, прочитали ли вы http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html? В частности, обратите внимание на атрибут clientAuth элемента Connector.

0 голосов
/ 12 октября 2009

Я не знаю, что речь идет о настройке Tomcat, за исключением возможности передать системные свойства веб-приложению, запущенному в Tomcat.

Поставщик, поставляющий веб-приложение, действительно должен быть в состоянии рассказать вам, как получить клиентское соединение от своего программного обеспечения для использования определенного сертификата клиента при установлении SSL-соединения с удаленной веб-службой.

Например, в их приложении может быть реализовано пользовательское KeyManager для соединений SSL, которое может искать сертификат клиента и закрытый ключ из настраиваемого местоположения.

Если они этого не сделали, возможно, они используют SunX509 KeyManager по умолчанию.

Для KeyManager по умолчанию вы, очевидно, можете использовать keytool для создания хранилища ключей, содержащего сертификат клиента и закрытый ключ, описанный в сертификате. Затем вы можете указать это хранилище ключей, используя следующие системные параметры:

-Djavax.net.ssl.keyStore="/path/to/keystore"
-Djavax.net.ssl.keyStorePassword="<password>"

Вам необходимо настроить Tomcat для передачи этих свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...