Tomcat SSL: доверенный сертификат не найден - PullRequest
3 голосов
/ 19 сентября 2010

Я создал сертификат, используя keytool:

keytool -genkey -alias tomcat -keyalg RSA

Экспортировал и импортировал его в мое хранилище ключей:

keytool -export -alias tomcat name.crt
keytool -import -file name.crt

Когда я делаю список ключей, у меня есть 2 записи:

tomcat, Sept 15, 2010, keyEntry,
Certificate fingerprint (MD5): ...
mykey, Sept 17, 2010, trustedCertEntry
Certificate fingerprint (MD5):...

Обратите внимание, что отпечатки обеих записей одинаковы.

Я настроил файл server.xml так, чтобы он указывал на мой файл .keystore

<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
       maxThreads="150" scheme="https" secure="true"
       keystoreFile="${user.home}/.keystore" keystorePass="changeit"
       clientAuth="false" sslProtocol="TLS" />

<Connector port="8009" protocol="AJP/1.3" redirectPort="443" />

Но в моих журналах tomcatКогда я выполняю действие в своем приложении Java, я вижу:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found
...
sun.security.validator.ValidatorException: No trusted certificate found

Есть ли какая-либо другая конфигурация, которую необходимо выполнить?

1 Ответ

1 голос
/ 19 сентября 2010

Вам нужен клиент (то есть браузер), чтобы доверять сертификатам ваших серверов.

Для этого вы либо импортируете сертификат сервера в браузер в качестве доверенного сертификата, который работает только тогда, когда браузер находится под вашим контролем. Или вы получаете сертификат, подписанный доверенным органом, который стоит денег.

экспорт и повторный импорт под другим именем не имеет никакого смысла.

Обновление:

Мне кажется, я начинаю понимать, что вы пытаетесь сделать. Вы хотите, чтобы клиент Java имел доступ к веб-приложению через https. да?

В этом случае вам необходимо предоставить «хранилище доверенных сертификатов», то есть хранилище ключей, содержащее доверенные сертификаты. Вам нужно установить системное свойство javax.net.ssl.trustStore на имя хранилища доверенных сертификатов, которое будет использоваться.

Возможно, вы также можете использовать TrustManager ручной работы. Этот сайт, кажется, дает информацию об этом: http://download.oracle.com/javase/1.4.2/docs/guide/security/jsse/JSSERefGuide.html

Этот простой пример также может помочь: http://stilius.net/java/java_ssl.php

...