Java SSL不适用于Tomcat 8

Java SSL不适用于Tomcat 8,java,tomcat,ssl,https,Java,Tomcat,Ssl,Https,我正在尝试为Tomcat8配置SSL(https),并完成了以下步骤,但仍然无法正常工作 1) 使用创建密钥库文件 keytool -genkey -alias myservername -keyalg RSA 2) 生成的CSR如下所示 keytool -certreq -alias myservername -file C:\tomcat_ssl\local_machine\test.csr -keystore C:\tomcat_ssl\local_machine\test.keysto

我正在尝试为Tomcat8配置SSL(https),并完成了以下步骤,但仍然无法正常工作

1) 使用创建密钥库文件

keytool -genkey -alias myservername -keyalg RSA
2) 生成的CSR如下所示

keytool -certreq -alias myservername -file C:\tomcat_ssl\local_machine\test.csr -keystore C:\tomcat_ssl\local_machine\test.keystore
3) 然后我们生成了证书,然后导入了链证书和证书,如下所示

keytool -import -alias root -keystore C:\tomcat_ssl\local_machine\test.keystore -trustcacerts -file C:\tomcat_ssl\local_machine\srv_chain.cer

keytool -import -alias myservername -keystore C:\tomcat_ssl\local_machine\test.keystore -file C:\tomcat_ssl\local_machine\srv_main.cer
4) 最后在tomcat server.xml中做了如下更改

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="C:\tomcat_ssl\local_machine\test.keystore" keystorePass="123" keystoreAlias="myservername"/>

Tomcat可以使用两种不同的SSL实现:

作为Java运行时的一部分提供的JSSE实现(从1.4开始) APR实现,默认情况下使用OpenSSL引擎。 确切的配置详细信息取决于正在使用的实现。如果您通过指定genericprotocol=“HTTP/1.1”来配置连接器,那么Tomcat使用的实现将自动选择。如果安装使用APR,即您已经安装了Tomcat本机库,那么它将使用APR SSL实现,否则将使用Java JSSE实现

有关配置的所有详细信息,请参阅。我只是简单地遵循这些步骤,这对我来说很有效

最重要的是,你确定你的tomcat有问题吗。您的错误可能来自您的浏览器

  • 除了IE,你还尝试过其他浏览器吗
  • 你正在使用哪个版本的IE
  • Windows 7还是Windows 8

如果您仅在IE中遇到此问题,请检查高级设置下的SSL 2.0和SSL 3.0,以及打开TLS 1.0、TLS 1.1和TLS 1.2的建议修复程序。

我很久以前就遇到过同样的问题

Mi解决方案是(我在这里遵循的步骤取决于CA说明,CA站点通常具有如何正确生成证书的完整说明):

  • 再次创建证书,但使用以下命令(keysize 2048)(确保名称和lastname与站点名称相同示例:yourhost.com:
  • keytool-genkey-alias yourhost.com-keyalg RSA-keysize 2048-keystore servername.jks

  • 企业社会责任基因
  • keytool-certreq-alias yourhost.com-file mycsr.txt-keystore servername.jks

  • 安装证书
  • keytool-import-trustcacerts-alias yourhost.com-file file-from-your-ca.p7b-keystore servername.jks

    在server.xml连接器上放置以下配置(注意:sslProtocol的可能值取决于您正在使用的jvm,请参阅java 8的可能值)

    
    
    重新启动tomcat


    还有更多关于如何在此站点上配置secure connector的示例:

    当您使用java 8时,将
    TLS 1.2

    通过查看屏幕截图,IE 11中未启用客户端TLS。默认情况下,已启用
    SSL 3.0、TLS 1.0、1.1、1.2

    如果你看到矩阵,你就会明白为什么连接不成功


    因此,请更新您的IE 11 SSL TLS设置或尝试使用其他浏览器进行验证。

    我目前面临类似的问题,我强烈怀疑我们的问题与server.xml中的Tomcat配置有关。我也看到该服务正在端口上侦听,但没有太多有用的消息在任何日志文件中都会出现异常

    我的一位同事告诉我,他(一个使用SSL的安全Tomcat)正在运行以进入

       <Connector port="443" scheme="https" server="Secure Web Server"
                  minSpareThreads="25" allowTrace="false" keystoreType="JKS"
                  keystoreFile="C:\tomcat\conf\aSecureTomcat.jks" keystorePass="yourPassword"  
                  connectionTimeout="20000"
                  protocol="org.apache.coyote.http11.Http11NioProtocol" 
                  secure="true" clientAuth="false" sslProtocol="TLS" 
                  sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" 
                  useServerCipherSuitesOrder="true" 
                  ciphers="TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"/> 
    
    
    

    我还没有找到最基本的配置,但对您来说最重要的部分可能是我的代码片段的最后5行。您的Tomcat配置是什么样子的?

    只需更改您的原始服务器。xml:sslProtocol=TLSv1.2包括版本号。以前也有相同的错误。

    尝试通过添加连接器强制使用JSSE:

    sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation"
    

    出于任何原因,它检测到APR并试图使用OpenSSL,但OpenSSL不起作用。请参阅。

    服务器启动期间的任何错误日志?您是否检查过任何其他浏览器(chrome/mozilla)?@redflar3 Hi,实际上在所有服务器日志中都没有错误信息。我只检查了IE 11,因为这里不允许使用其他浏览器…您使用的是什么java版本?您可以使用SSLLAB测试您的服务器吗?如果不可以,您可以构建一个简单的java客户端,并使用
    -Djavax.net.debug=all
    调试SSL连接,以获得详细信息在客户端登录。将结果添加到question@pedrofb在tomcat中启用SSL调试后,我正在使用Java 8 adn,我在最初的问题中提供了日志消息。主要错误如下。您认为TLS 1.2解散问题是否导致此错误http-nio-443-exec-5,致命:引擎已关闭。重试javax.net.SSL。SSLHandshakeException:SSLv2Hello被禁用。如果您的客户端正在发送SSLv2Hello消息,而服务器不允许,请尝试在tomcat中启用它,然后在JDK中使用
    -Dsun.security.ssl.AllowUnsaferencationation=true
    启用SSLv2Hello,我不确定这是否是正确的方法。在该测试之后,尝试在Inte中禁用sslv2rnet资源管理器并仅启用tlsThanks进行回复。我使用的是提供的通用协议,而不是APR。我在服务器本身中进行了尝试,但它不工作,并且没有按照上面粘贴的方式显示页面。即使我在客户端计算机windows 7中使用IE 11进行了尝试,但它显示了相同的消息。我已经在Advanced setti中启用了所有TLS 1、2、3你能用Firefox或Chrome试试吗?我用Chrome试过了,但没用,显示了空页面…你能在你的服务器中添加sslEnabledProtocols属性吗?xml sslEnabledProtocols=“TLSv1.2,TLSv1.1,TLSv1”尝试通过添加sslImplementationName=“org.apache.tomcat.util.net.JSSE.JSSEImplementation”来强制JSSE使用在您的连接器中。除此之外,没有一个对我有效。我已经尝试过,但它仍然提供无法显示的页面。打开TLS 1.0、TLS 1.1和TLS 1.2。如初始快照中提供的那样,查看日志,我可以看到错误消息:SSLv2Hello已禁用;这意味着您的客户端正在尝试使用SSL进行连接
       <Connector port="443" scheme="https" server="Secure Web Server"
                  minSpareThreads="25" allowTrace="false" keystoreType="JKS"
                  keystoreFile="C:\tomcat\conf\aSecureTomcat.jks" keystorePass="yourPassword"  
                  connectionTimeout="20000"
                  protocol="org.apache.coyote.http11.Http11NioProtocol" 
                  secure="true" clientAuth="false" sslProtocol="TLS" 
                  sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" 
                  useServerCipherSuitesOrder="true" 
                  ciphers="TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"/> 
    
    sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation"