нужна помощь отладка SSL рукопожатие в Tomcat - PullRequest
1 голос
/ 08 декабря 2011

У меня очень странная проблема, и я ищу несколько советов.У меня есть сертификат, отправленный клиентом, который мне нужно установить, чтобы я мог получить доступ к веб-сервису HTTPS.Сертификат был установлен как в Windows, так и в ОС Linux.используя команду keytool

keytool -import -alias ca -file somecert.cer -keystore cacerts –storepass changeit

при развертывании приложения в Windows Tomcat, я могу связаться с веб-сервером HTTPS.Однако Linux tomcat выдает мне сообщение об ошибке:

Причина: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации для запрошенной цели в sun.security.provider.certpath.SunCertPathBuilder.engineBuild (SunCertPathBuilder.java:236) в java.security.cert.CertPathBuilder.build (CertPathBuilder.java:194) в sun.security.validator.PKIXValidator.doBuild (PKIXValidator.java:216 100 * 100) 1007* Это означает, что он не мог найти сертификат.Сертификат находится в java безопасности cacerts.Я использовал команду keytool -list, и она есть.

Я понятия не имею, почему она работает в Windows, а не в Linux.Я попытался установить параметры в Мой сервлет

System.setProperty("javax.net.debug", "all"); 
System.setProperty("javax.net.ssl.trustStore", "/usr/java/jdk1.5.0_14/jre/lib/security/cacerts"); 
System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); 

Это все еще не работает.

Мои вопросы:

1. Никто не знает, почему этоне работает, я устал все?

2.Как вы включаете отладку SSL для tomcat.Ss настройка System.setProperty("javax.net.debug", "all") работает?По какой-то причине я не вижу никакой информации отладки SSL в Catalina.out.Нужно ли мне что-то менять? Какую отладочную информацию я должен увидеть.

Любая помощь очень важна. У меня нет идей.

Ответы [ 2 ]

2 голосов
/ 19 марта 2015

Чтобы решить эту проблему, вы можете попробовать следующее

Загрузите SSLPoke.java из Google

SSLPoke.java

Скомпилируйте это:

javac SSLPoke.java 

Как только вы скомпилируете код, вызовите SSLPoke как

java -Djavax.net.debug=all SSLPoke [your https host] 443

В выводе вы увидите, где java ищет cacerts.

Как только вы знаете точное местоположение, используйте keytool для импорта вашего файла в cacerts

keytool -import -alias [your https host] -keystore [the location returned]/cacerts -file [your.crt]

И это все, перезапустите Tomcat, и он должен работать правильно.

Иногда, когда у вас много версий Java на одном и том же компьютере с Linux, даже добавление [your.crt] в кадры, возвращаемые отладкой, не работает, если это так, добавьте [your.crt] ко всем кадрам Linux машина, вы можете найти их все с:

locate cacert

после того, как машина Linux вернет все местоположения cacerts, например:

/home/xuser/NetBeansProjects/porjectx/conf/cacerts
/opt/otherlocation/j2sdkee1.3.1/lib/security/cacerts.jks
/opt/icedtea-bin-6.1.12.7/jre/lib/security/cacerts
/opt/icedtea-bin-6.1.13.5/jre/lib/security/cacerts
/opt/icedtea-bin-7.2.4.1/jre/lib/security/cacerts
/opt/oracle-jdk-bin-1.7.0.76/jre/lib/security/cacerts
/opt/sun-j2ee-1.3.1/lib/security/cacerts.jks

добавьте [your.crt] ко всем из них с помощью keytool и перезапустите tomcat.

Если у вас нет файла your.crt, вы можете получить его командой

openssl s_client -connect [your https host]:443 < /dev/null

и скопировать из ----- НАЧАТЬ СЕРТИФИКАТ ----- в ----- КОНЕЦ СЕРТИФИКАТА -----

Надеюсь, это поможет вам

0 голосов
/ 20 июня 2016

Проверяли ли вы сам сертификат на предмет отсутствия каких-либо корневых сертификатов в пути сертификата?

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

...