2017-07-16 132 views
9

我试图为Tomcat配置8 SSL(HTTPS)和下面的步骤做了,但还是它不工作SSL不工作的Tomcat的8

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和它不工作,并显示以下屏幕

Error when accessing tomcat https

在Tomcat的日志,它不是显示任何错误,我也尝试过其他选项,如保持cipher标记连接,Enabled TLS 1,2,3,更改https端口等无济于事。

另外我已经测试了https端口443,它显示为监听时,我netstat。任何想法,这是为什么不启用SSL调试tomcat中

http-nio-443-exec-5, fatal error: 10: General SSLEngine problem 
javax.net.ssl.SSLHandshakeException: SSLv2Hello is disabled 
http-nio-443-exec-5, SEND TLSv1.2 ALERT: fatal, description = unexpected_message 
http-nio-443-exec-5, WRITE: TLSv1.2 Alert, length = 2 
http-nio-443-exec-5, fatal: engine already closed. Rethrowing javax.net.ssl.SSLHandshakeException: SSLv2Hello is disabled 
http-nio-443-exec-5, called closeOutbound() 
http-nio-443-exec-5, closeOutboundInternal() 
[Raw write]: length = 7 
+0

服务器启动过程中的任何错误日志?你有没有检查过其他浏览器(chrome/mozilla)? –

+0

@ redflar3嗨,实际上在所有服务器日志中没有错误信息..我只检查IE 11,因为其他浏览器不允许在这里... – JavaGeek

+0

你使用的是什么Java版本?你能用SSLLabs测试你的服务器吗?如果没有,您可以构建一个简单的Java客户端并用'-Djavax.net.debug = all'调试SSL连接,以在客户端获得详细的日志。将结果添加到您的问题 – pedrofb

回答

0

的Tomcat可以使用SSL的两种不同的实现工作后

新增日志:

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

请参阅https://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html了解配置的所有详细信息。我只需按照步骤操作即可。

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

  • 您是否试过IE以外的其他浏览器?
  • 您使用的是哪个版本的IE?
  • Windows 7或Windows 8?

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

+0

感谢您的回复。我使用的是通用协议,而不是APR。我通过https:// localhost尝试了服务器本身,并且它不工作并显示上面粘贴的页面。即使我已经尝试在IE 11客户机Windows 7中,但它显示相同的消息。我已经在IE的高级设置中启用了所有TLS 1,2,3,但无济于事。 – JavaGeek

+0

你可以试试Firefox或Chrome吗? – Kambiz

+0

我曾尝试使用Chrome,但它没有工作,并显示空白页... – JavaGeek

3

很久以前我有同样的问题。

弥溶液(即我遵循此处依赖于CA指示的步骤中,CA网站ussually对如何生成正确证书的完整instruccions):具有下列再次但是

  1. 创建证书命令(密钥大小2048)(确保名和姓氏是相同的网站名称例如:yourhost.com:

keytool -genkey -alias yourhost.com -keyalg RSA -keysize 2048 -keystore servername.jks

  • Genearate德CSR
  • 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的可能值8 java 8 ssl values

    <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" keystoreFile="/home/myserver/ssl/servername.jks" keystorePass="yourpass" keystoreAlias="yourhost.com" sslProtocol="TLSv1.2" /> 
    

    重新启动Tomcat

    有如何在此网站上配置安全连接更多的例子:Secure Tomcat

    +0

    谢谢丹尼尔。我会尝试这些步骤,并让你知道.. – JavaGeek

    +0

    我已经尝试,但它仍然给页面无法显示..打开TLS 1.0,TLS 1.1和TLS 1.2 ..提供初始快照 – JavaGeek

    +0

    嗨,看着日志我可以看到错误消息:SSLv2Hello已禁用;这意味着您的客户端正尝试使用SSLV2进行连接。在这种情况下,请在server.xml连接器中使用以下值sslEnabledProtocols =“TLSv1,TLSv1.1,TLSv1.2,SSLv2Hello” –

    3

    当你使用的是Java 8,从而defaultTLS 1.2

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

    如果你看到protocols矩阵,你会问为什么连接不成功。

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

    +0

    如果你仍然想在tomcat级别执行它,那么你可能需要在tomcat端启用'SSLv3'。请检查脚注2 [这里]提到(https://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html#SunJSSE_Protocols) –

    +0

    感谢您的信息...我会检查Matrix并尝试几件事情,并在这里更新 – JavaGeek

    +0

    @JavaGeek,上面的信息有助于解决您的问题? –

    0

    我目前正面临类似的问题,我得到了强烈的怀疑,我们的问题与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配置如何?

    +0

    以上配置是否适合你... – JavaGeek

    +0

    不幸的是,即使这种配置对我也不适用 – JavaGeek

    +0

    它还没有为我工作(由于认证问题,即使没有SSL),但对我的同事。我的同事给你建议的是,根据Kambiz的建议,仔细检查客户端设置(在IE中),以便它们与你的connector_匹配。除此之外,你有没有检查过https://stackoverflow.com/questions/26488667/tomcat-7-getting-sslv2hello-is-disabled-error-when-trying-to-make-client-server? –