java.security.NoSuchAlgorithmException: (алгоритм: по умолчанию, поставщик: SunJSSE, класс: sun.security.ssl.SSLContextImpl $ DefaultSSLContext) - PullRequest
0 голосов
/ 20 декабря 2018

Я пробовал много решений из Интернета.Но никакое решение не кажется мне подходящим.

Недавно мы обновили tomcat server 8.0.x до 8.5.x.С 8.0.x все работало нормально.Но после обновления мы сталкиваемся с этой ошибкой, когда пытаемся подключиться к серверу из Java Spring restTemplate с https.

При подключении через http я не обнаружил никаких ошибок.

":java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext);  
    nested exception is java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)

1 Ответ

0 голосов
/ 21 декабря 2018

Некоторые сведения о последних изменениях в tomcat 8.5.x: (как объяснено в @ dave-thompson-085 в другом посте)

Java 8u60 up getInstance ("JKS"") (с обычными провайдерами) может читать либо JKS, либо PKCS12, но" PKCS12 "читает только PKCS12, как это происходит здесь.В 9 и 10 (я еще не пробовал 11) он работает в обоих направлениях, но трассировка стека OP не показывает модули как 9 up.Tomcat 8.5 (и 9.0) в основном переписал конфигурационную область SSL / TLS для обработки нескольких сертификатов (SNI), а также для выравнивания ранее различных конфигураций JSSE vs APR = OpenSSL, но, по моему мнению, он все равно должен по умолчанию использовать JKS, если вы не (не) установилиjavax.net.ssl.keyStoreType

Как мы это исправили:
В tomcat 8.0 значение по умолчанию для javax.net.ssl.keyStoreType равно JKS .После того, как мы обновились до tomcat 8.5.x, они изменились на PKCS12 , поскольку в настоящее время он используется в качестве отраслевого стандарта.

После того, как я сломал себе голову, заметил, что в файле tomcat.conf аргументы виртуальной машины настроены на использование PKCS12 .Я изменил на JKS .Все работало нормально после.

Изменено -Djavax.net.ssl.keyStoreType=PKCS12 на -Djavax.net.ssl.keyStoreType=JKS

Совет: Если не удается найти файл tomcat.conf, найдите файл, содержащий строку "-Djavax.net.ssl.keyStoreType "в боковом каталоге tomcat.Я видел, что у портативного томата Windows этот файл отсутствует.

...