【问题标题】:java.security.NoSuchAlgorithmException: (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)java.security.NoSuchAlgorithmException:(算法:默认,提供者:SunJSSE,类:sun.security.ssl.SSLContextImpl$DefaultSSLContext)
【发布时间】:2018-12-20 03:58:07
【问题描述】:

我尝试了许多来自网络的解决方案。但似乎没有任何解决方案适合我。

我们最近将 tomcat 服务器 8.0.x 升级到了 8.5.x。使用 8.0.x 一切正常。但是升级后,当我们尝试使用 https 从 java 的 Spring restTemplate 连接到服务器时,我们遇到了这个错误。

通过 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)

【问题讨论】:

  • 是的。我已经看到了。但我的问题是它在 tomcat 8.0 上运行良好,而在 tomcat 8.5.x 上运行失败。无法理解我错过了什么。

标签: java tomcat https keystore resttemplate


【解决方案1】:

关于 tomcat 8.5.x 近期变化的一些背景知识:(由 @dave-thompson-085 在另一篇文章中解释)

Java 8u60 up getInstance("JKS") (使用普通提供程序)可以读取 JKS 或 PKCS12,但“PKCS12”只读取正在发生的 PKCS12 这里。在 9 和 10(我还没有尝试过 11)中,它可以双向工作, 但是 OP 的堆栈跟踪没有像 9 一样显示模块。雄猫 8.5 (和 9.0)主要重写了 SSL/TLS 配置区域以处理多个 certs (SNI) 并且还对齐以前不同的 JSSE 与 APR=OpenSSL 配置,但在我看来,它仍应默认为 JKS 除非你(错误)设置了 javax.net.ssl.keyStoreType

我们如何解决这个问题:
在 tomcat 8.0 中,javax.net.ssl.keyStoreType 的默认值为 JKS。在我们升级到 tomcat 8.5.x 后,它们更改为 PKCS12,因为这几天被用作行业标准。

一段时间后,我注意到,在tomcat.conf 文件中,VM 参数配置为使用 PKCS12。我改为 JKS。之后一切正常。

-Djavax.net.ssl.keyStoreType=PKCS12 更改为-Djavax.net.ssl.keyStoreType=JKS

提示: 如果找不到tomcat.conf 文件,请在旁边的tomcat 目录中搜索包含“-Djavax.net.ssl.keyStoreType”字符串的文件。我看到了,windows便携tomcat没有那个文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    相关资源
    最近更新 更多