我从网上尝试了很多解决方案。但似乎没有一个解决方案适合我。
我们最近将 tomcat 服务器 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)
有关 tomcat 8.5.x 最近更改的一些背景信息:(@dave-thompson-085 在另一篇文章中对此进行了解释)
Java 8u60 up getInstance("JKS")(使用普通提供程序)可以读取
JKS 或 PKCS12,但“PKCS12”仅读取正在发生的 PKCS12
这里。在 9 和 10 中(我还没有尝试过 11)它可以双向工作,
但是OP的堆栈跟踪没有像9 up那样显示模块。雄猫8.5
(和 9.0)主要重写了 SSL/TLS 配置区域以处理多个
certs (SNI) 并调整之前不同的 JSSE 与
APR=OpenSSL 配置,但根据我的阅读,它仍应默认为 JKS
除非你(错误)设置了 javax.net.ssl.keyStoreType
我们如何解决这个问题:
在tomcat 8.0中默认值为javax.net.ssl.keyStoreType
is JKS。我们升级到tomcat 8.5.x后,它们变成了PKCS12因为如今这已被用作行业标准。
在打破我的头一段时间后,注意到,tomcat.conf
文件,VM 参数配置为使用PKCS12。我改为JKS。之后一切正常。
Changed -Djavax.net.ssl.keyStoreType=PKCS12
to -Djavax.net.ssl.keyStoreType=JKS
Tip:如果找不到 tomcat.conf 文件,请在 tomcat 目录中搜索包含“-Djavax.net.ssl.keyStoreType”字符串的文件。我看到Windows portable tomcat没有那个文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)