完美配置Tomcat的HTTPS


Tomcat配置HTTPS的文章到處都有,過程也比較簡單,隨后文中會轉一段過來。

但對於啟用APR情況下報異常“java.lang.Exception: Connector attribute SSLCertificateFile must be defined when  using SSL with APR”的解決方法上處理的都比較偷懶,通常都是把APR注釋掉不啟用APR。

做為一個文藝青年兼軟件開發工程師(偶吐),我有責任深入學習仔細研究完美解決這個問題(偶再吐)。

 

資料轉載【TOMCAT配置HTTPS】

################################################################

 

 

二、創建證書

啰嗦幾句:證書是單點登錄認證系統中很重要的一把鑰匙,客戶端於服務器的交互安全靠的就是證書;本教程由於是演示所以就自己用JDK自帶的keytool工具生成證書;如果以后真正在產品環境中使用肯定要去證書提供商去購買,證書認證一般都是由VeriSign認證,中文官方網站:http://www.verisign.com/cn/

用JDK自帶的keytool工具生成證書:

keytool -genkey -alias wsria -keyalg RSA -keystore d:/keys/wsriakey

無圖不給力,有圖有真相:

用keytool生成證書

具體的輸入項圖片中都有說明,有一點我要解釋一下;在輸入完密碼后提示輸入域名是我輸入的是sso.wsria.com,其實這個域名是不存在的,但是我為了演示所以虛擬了這個域名,技巧在於修改

C:\Windows\System32\drivers\etc\hosts

添加內容如下:

127.0.0.1  sso.wsria.com

這樣在訪問sso.wsria.com的時候其實是訪問的127.0.0.1也就是本機

嚴重提醒:提示輸入域名的時候不能輸入IP地址

三、導出證書

D:\keys>keytool -export -file d:/keys/wsria.crt -alias wsria -keystore d:/keys/wsriakey

特別提示:如果提示:

keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect

那么請輸入密碼:changeit

來點顏色:

用keytool導出證書

至此導出證書完成,可以分發給應用的JDK使用了,接下來講解客戶端的JVM怎么導入證書。

四、為客戶端的JVM導入證書

keytool -import -keystore D:\tools\jdk\1.6\jdk1.6.0_20\jre\lib\security\cacerts -file D:/keys/wsria.crt -alias wsria

來點顏色瞧瞧:

用keytool導出證書

特別說明

D:\tools\jdk\1.6\jdk1.6.0_20\jre\lib\security -- 是jre的目錄;密碼還是剛剛輸入的密碼。至此證書的創建、導出、導入到客戶端JVM都已完成,下面開始使用證書到Web服務器中,本教程使用tomcat。

五、應用證書到Web服務器-Tomcat

說是應用起始做的事情就是啟用Web服務器(Tomcat)的SSL,也就是HTTPS加密協議,為什么加密我就不用啰嗦了吧…… 准備好一個干凈的tomcat,本教程使用的apache-tomcat-6.0.29 打開tomcat目錄的conf/server.xml文件,開啟83和87行的注釋代碼,並設置keystoreFile、keystorePass修改結果如下:

<connector

port="8443"

protocol="HTTP/1.1"

sslenabled="true"

maxthreads="150"

scheme="https"

secure="true"

clientauth="false"

sslprotocol="TLS"

keystorefile="D:/keys/wsriakey"

keystorepass="wsria.com">

</connector>

參數說明:

  • keystoreFile:在第一步創建的key存放位置
  • keystorePass:創建證書時的密碼

好了,到此Tomcat的SSL啟用完成,現在你可以啟動tomcat試一下了,例如本教程輸入地址:https://sso.wsria.com:8443/ 打開的是:

瀏覽器提示證書錯誤

好的,那么我們點擊“繼續瀏覽此網站(不推薦)。現在進入Tomcat目錄了吧,如果是那么你又向成功邁進了一步。

################################################################

來自http://www.kafeitu.me/2010/11/05/sso-cas-full-course.html

 

文章寫的很好,也很細致。

 

嗯。好了,問題來了。

 

當我啟動Tomcat時發現控制台報錯如下:

2012-5-16 13:10:37 org.apache.catalina.core.AprLifecycleListener init  
信息: Loaded APR based Apache Tomcat Native library 1.1.23.  
2012-5-16 13:10:37 org.apache.catalina.core.AprLifecycleListener init  
信息: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].  
2012-5-16 13:10:37 org.apache.coyote.AbstractProtocol init  
信息: Initializing ProtocolHandler ["http-apr-8080"]  
2012-5-16 13:10:37 org.apache.coyote.AbstractProtocol init  
信息: Initializing ProtocolHandler ["http-apr-8443"]  
2012-5-16 13:10:37 org.apache.coyote.AbstractProtocol init  
嚴重: Failed to initialize end point associated with ProtocolHandler ["http-apr-8443"]  
java.lang.Exception: <span style="background-color: #ffff00;">Connector attribute SSLCertificateFile must be defined when using SSL with APR</span>  
        at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:484)  
        at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:566)  
        at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:417)  
        at org.apache.catalina.connector.Connector.initInternal(Connector.java:956)  
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)  
        at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)  

 

直接Google,很多答案都是不啟用APR,修改conf/server.xml注釋掉下面一段

<!--APR library loader. Documentation at /docs/apr.html -->  
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />  

 例如:http://tdp100.iteye.com/code?tag=tomcat+https

但這樣做將失去APR庫的價值,Tomcat性能必然下降(APR庫作用見此處http://wenson.iteye.com/blog/382738

 

讓我們打開Tomcat的文檔webapps/docs/apr.html,其中講到

<Connector port="443" maxHttpHeaderSize="8192"
                 maxThreads="150"
                 enableLookups="false" disableUploadTimeout="true"
                 acceptCount="100" scheme="https" secure="true"
                 SSLEnabled="true"
                 SSLCertificateFile="${catalina.base}/conf/localhost.crt"
                 SSLCertificateKeyFile="${catalina.base}/conf/localhost.key" />
 

SSLCertificateFile屬性好理解,是指證書文件,就是用keytool導出的那個。

而SSLCertificateKeyFile應該是指私鑰,這個東西從哪里來呢,繼續找資料。

 

在這里:http://stackoverflow.com/questions/150167/how-do-i-list-export-private-keys-from-a-keystore

 

關鍵是這一段:

keytool -importkeystore -srckeystore keystore.jks \
    -destkeystore intermediate.p12 -deststoretype PKCS12
Next, use OpenSSL to do the extraction to PEM:

openssl pkcs12 -in intermediate.p12 -out extracted.pem -nodes

先把keystore轉換為pkcs12格式,然后使用openssl工具導出私鑰即可。

openssl 工具可以從這里下載:http://gnuwin32.sourceforge.net/packages/openssl.htm

 

ohYeah! 搞定了。

來點顏色瞧瞧:

用keytool導出證書

特別說明

D:\tools\jdk\1.6\jdk1.6.0_20\jre\lib\security -- 是jre的目錄;密碼還是剛剛輸入的密碼。至此證書的創建、導出、導入到客戶端JVM都已完成,下面開始使用證書到Web服務器中,本教程使用tomcat。

五、應用證書到Web服務器-Tomcat

說是應用起始做的事情就是啟用Web服務器(Tomcat)的SSL,也就是HTTPS加密協議,為什么加密我就不用啰嗦了吧…… 准備好一個干凈的tomcat,本教程使用的apache-tomcat-6.0.29 打開tomcat目錄的conf/server.xml文件,開啟83和87行的注釋代碼,並設置keystoreFile、keystorePass修改結果如下:

?
1
2
< connector port = "8443" protocol = "HTTP/1.1" sslenabled = "true" maxthreads = "150"
scheme = "https" secure = "true" clientauth = "false" sslprotocol = "TLS"
keystorefile = "D:/keys/wsriakey" keystorepass = "wsria.com" >
</ connector >

參數說明:

  • keystoreFile:在第一步創建的key存放位置
  • keystorePass:創建證書時的密碼

好了,到此Tomcat的SSL啟用完成,現在你可以啟動tomcat試一下了,例如本教程輸入地址:https://sso.wsria.com:8443/ 打開的是:

瀏覽器提示證書錯誤

好的,那么我們點擊“繼續瀏覽此網站(不推薦)。現在進入Tomcat目錄了吧,如果是那么你又向成功邁進了一步。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM