簡體   English   中英

SSL無法用於Tomcat 8

[英]SSL not working for Tomcat 8

我正在嘗試為tomcat 8配置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,它無法正常工作並顯示在屏幕下方

訪問tomcat https時出錯

在tomcat日志中,它沒有顯示任何錯誤,我也嘗試了其他選項,例如保持連接中的cipher標簽, Enabled TLS 1,2,3 ,更改https端口等均無濟於事。

我也測試了https端口443,當我netstat時顯示為正在監聽。 知道為什么這不起作用

在tomcat中啟用SSL調試后添加了日志

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

當您使用Java 8時, 默認 TLS 1.2

通過查看屏幕快照,IE 11中未啟用客戶端TLS。默認情況下, IE 11啟用了SSL 3.0, TLS 1.0, 1.1, 1.2

如果看到協議矩陣,您將了解為什么連接不成功。

因此,請更新您的IE 11 SSL TLS設置,或嘗試使用其他瀏覽器進行驗證。

我很久以前也遇到過同樣的問題。

Mi解決方案是(我在此遵循的步驟取決於CA的說明,CA站點通常具有如何正確生成證書的完整說明):

  1. 再次創建證書,但使用以下命令(密鑰大小2048)(確保名稱和姓氏與您的站點名稱示例相同:yourhost.com:

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

  1. 生成csr

keytool -certreq -alias yourhost.com -file mycsr.txt -keystore servername.jks

  1. 安裝證書

keytool -import -trustcacerts -alias yourhost.com -file file-from-your-ca.p7b -keystore servername.jks

在server.xml連接器上,進行以下配置(注意:sslProtocol可能的值取決於您使用的jvm,請參閱java 8 java 8 ssl值的可能

<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

有關如何在此站點上配置安全連接器的更多示例: 安全Tomcat

Tomcat可以使用兩種不同的SSL實現:

作為Java運行時(自1.4版開始)的一部分提供的JSSE實現,默認情況下使用OpenSSL引擎的APR實現。 確切的配置詳細信息取決於所使用的實現。 如果通過指定通用協議=“ HTTP / 1.1”配置了連接器,則將自動選擇Tomcat使用的實現。 如果安裝使用APR(即您已經安裝了Tomcat本機庫),則它將使用APR SSL實現,否則將使用Java JSSE實現。

有關配置的所有詳細信息,請參閱https://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html 我只需遵循這些步驟,它對我有用。

最重要的是,您確定您的雄貓中有問題嗎? 您的錯誤可能來自瀏覽器。

  • 您是否嘗試過IE以外的其他瀏覽器?
  • 您正在使用哪個版本的IE?
  • Windows 7或Windows 8?

如果僅在IE中遇到問題,請同時檢查“高級設置”下的SSL 2.0和SSL 3.0,以及建議的打開TLS 1.0,TLS 1.1和TLS 1.2的修補程序。

我目前正面臨類似的問題,並且我強烈懷疑我們的問題與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配置如何?

只需更改原始的server.xml:sslProtocol = TLSv1.2包括版本號即可。 之前有相同的錯誤。

通過添加連接器,嘗試強制使用JSSE:

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

出於某種原因,它正在檢測APR並嘗試使用不起作用的OpenSSL。 看到這個答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM