Java 无法使用HTTPS连接到服务器上运行的Spring项目(SSL错误)

Java 无法使用HTTPS连接到服务器上运行的Spring项目(SSL错误),java,spring,ssl,https,connect,Java,Spring,Ssl,Https,Connect,到目前为止,我已经建立了一个SpringFramework5项目。需要为某些功能启用HTTPS,因此遵循教程。当前使用以下命令在服务器上生成证书和密钥: keytool -genkeypair -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365000 然后,我将此密钥库导入我的资源文件夹,并使用以下属性: server.ssl.key store=class

到目前为止,我已经建立了一个SpringFramework5项目。需要为某些功能启用HTTPS,因此遵循教程。当前使用以下命令在服务器上生成证书和密钥:

keytool -genkeypair -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365000
然后,我将此密钥库导入我的资源文件夹,并使用以下属性:

server.ssl.key store=classpath:keystore.p12
server.ssl.key store password=myPassword
server.ssl.key store type=PKCS12
server.ssl.key别名=tomcat
server.port=8444
我还使用以下配置设置了从HTTP到HTTPS的重定向:

@Bean
公共ServletWebServerFactory servletContainer(){
TomcatServletWebServerFactory tomcat=新的TomcatServletWebServerFactory(){
@凌驾
受保护的void后处理上下文(上下文上下文){
SecurityConstraint SecurityConstraint=新的SecurityConstraint();
securityConstraint.setUserConstraint(“机密”);
SecurityCollection集合=新建SecurityCollection();
collection.addPattern(“/*”);
securityConstraint.addCollection(集合);
addConstraint(securityConstraint);
}
};
addAdditionalTomcatConnectors(重定向连接器());
返回tomcat;
}
专用连接器重定向连接器(){
连接器连接器=新连接器(“org.apache.coyote.http11.Http11NioProtocol”);
connector.setScheme(“http”);
连接器。设置端口(8182);
连接器。设置安全(假);
连接器。设置重定向端口(8444);
返回连接器;
}
当从我的IDE本地运行或运行编译好的.jar时,它工作得很好。但是,当我尝试在我的服务器上运行它时(一个本地运行的Synology NAS,以前运行得很好),我在尝试访问地址时会出错(
https://192.168.10.10:8444
)在Firefox上出现以下错误:
SSL\u错误\u否\u密码重叠
在chrome上,SSL版本错误或密码不匹配。我一直在寻找答案,但我没有找到任何改变这个问题结果的解决方案

服务器上可用的JDK密码:

Default Cipher
        SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA
*       SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA
        SSL_DHE_DSS_WITH_DES_CBC_SHA
        SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA
*       SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA
        SSL_DHE_RSA_WITH_DES_CBC_SHA
        SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA
        SSL_DH_anon_WITH_3DES_EDE_CBC_SHA
        SSL_DH_anon_WITH_DES_CBC_SHA
        SSL_RSA_EXPORT_WITH_DES40_CBC_SHA
*       SSL_RSA_WITH_3DES_EDE_CBC_SHA
        SSL_RSA_WITH_DES_CBC_SHA
        SSL_RSA_WITH_NULL_MD5
        SSL_RSA_WITH_NULL_SHA
*       TLS_DHE_DSS_WITH_AES_128_CBC_SHA
*       TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
*       TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
*       TLS_DHE_DSS_WITH_AES_256_CBC_SHA
*       TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
*       TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
*       TLS_DHE_RSA_WITH_AES_128_CBC_SHA
*       TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
*       TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
*       TLS_DHE_RSA_WITH_AES_256_CBC_SHA
*       TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
*       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
        TLS_DH_anon_WITH_AES_128_CBC_SHA
        TLS_DH_anon_WITH_AES_128_CBC_SHA256
        TLS_DH_anon_WITH_AES_128_GCM_SHA256
        TLS_DH_anon_WITH_AES_256_CBC_SHA
        TLS_DH_anon_WITH_AES_256_CBC_SHA256
        TLS_DH_anon_WITH_AES_256_GCM_SHA384
*       TLS_EMPTY_RENEGOTIATION_INFO_SCSV
        TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5
        TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA
        TLS_KRB5_WITH_3DES_EDE_CBC_MD5
        TLS_KRB5_WITH_3DES_EDE_CBC_SHA
        TLS_KRB5_WITH_DES_CBC_MD5
        TLS_KRB5_WITH_DES_CBC_SHA
*       TLS_RSA_WITH_AES_128_CBC_SHA
*       TLS_RSA_WITH_AES_128_CBC_SHA256
*       TLS_RSA_WITH_AES_128_GCM_SHA256
*       TLS_RSA_WITH_AES_256_CBC_SHA
*       TLS_RSA_WITH_AES_256_CBC_SHA256
*       TLS_RSA_WITH_AES_256_GCM_SHA384
        TLS_RSA_WITH_NULL_SHA256
我的openSSL s_客户端连接输出:

No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA
Server Temp Key: DH, 1024 bits
---
SSL handshake has read 1601 bytes and written 505 bytes
Verification error: self signed certificate
---
New, TLSv1.2, Cipher is DHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : DHE-RSA-AES256-GCM-SHA384
    Session-ID: 5B9B776C430F2AEF917BAE78C14F78CDC6DB2F0ED7284E66EFAF9688319F46B2
    Session-ID-ctx:
    Master-Key: FBA675AEDE7EB03926991415E6760249DE82E4967EC7A724D04C1D8FEFC2C3CC37DFC84ACD29607CAF88775EBBD6E519
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1536915308
    Timeout   : 7200 (sec)
    Verify return code: 18 (self signed certificate)
    Extended master secret: no
---

典型的错误可能是*.p12文件将不会打包到部署的工件中


你检查过你的罐子里有吗?

老问题,但我也有同样的问题。Synology站使用旧JDK(1.8.0_161)。更新到最新的1.8(1.8.0_202-b08)后,一切正常。

是的,它位于jar中。(\BOOT-INF\classes\keystore.p12)我写了一篇关于如何调试SSL问题的文章,也许您需要做更深入的调查:(我在原始帖子中添加了一个服务器上可用密码的列表。据我所知,客户端和服务器协商双方都有的最佳选项,有了这个列表,我非常确定chrome和firefox等现代浏览器可以找到一个共同的密码?我对这件事不太了解,所以当然可能是错的!你怎么看应该使用应用程序服务器使用的JDK在服务器上使用。如果可以连接,应用程序也可以连接。链接也很有用,尤其是Java版本支持的TLS协议版本表。顺便说一句,您添加的列表属于应用程序服务器的JDK,您也必须检查连接(ssl调试btw应该显示问题所在,提示:如果使用它,重定向SSLPoke/java应用程序的stdout,它可能会很大)。