Tomcat配置HTTPS的文章處處都有,過程也比較簡單,隨後文中會轉一段過來。html
但對於啓用APR狀況下報異常「java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR」的解決方法上處理的都比較偷懶,一般都是把APR註釋掉不啓用APR。java
作爲一個文藝青年兼軟件開發工程師(偶吐),我有責任深刻學習仔細研究完美解決這個問題(偶再吐)。node
資料轉載【TOMCAT配置HTTPS】web
################################################################apache
囉 嗦幾句:證書是單點登陸認證系統中很重要的一把鑰匙,客戶端於服務器的交互安全靠的就是證書;本教程因爲是演示因此就本身用JDK自帶的keytool工 具生成證書;若是之後真正在產品環境中使用確定要去證書提供商去購買,證書認證通常都是由VeriSign認證,中文官方網站:http://www.verisign.com/cn/瀏覽器
用JDK自帶的keytool工具生成證書:tomcat
keytool -genkey -alias wsria -keyalg RSA -keystore d:/keys/wsriakey
無圖不給力,有圖有真相:安全
具體的輸入項圖片中都有說明,有一點我要解釋一下;在輸入完密碼後提示輸入域名是我輸入的是sso.wsria.com,其實這個域名是不存在的,可是我爲了演示因此虛擬了這個域名,技巧在於修改服務器
C:\Windows\System32\drivers\etc\hosts
添加內容以下:app
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
來點顏色:
至此導出證書完成,能夠分發給應用的JDK使用了,接下來說解客戶端的JVM怎麼導入證書。
keytool -import -keystore D:\tools\jdk\1.6\jdk1.6.0_20\jre\lib\security\cacerts -file D:/keys/wsria.crt -alias wsria
來點顏色瞧瞧:
D:\tools\jdk\1.6\jdk1.6.0_20\jre\lib\security -- 是jre的目錄;密碼仍是剛剛輸入的密碼。至此證書的建立、導出、導入到客戶端JVM都已完成,下面開始使用證書到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
>
|
好了,到此Tomcat的SSL啓用完成,如今你能夠啓動tomcat試一下了,例如本教程輸入地址:https://sso.wsria.com:8443/ 打開的是:
好的,那麼咱們點擊「繼續瀏覽此網站(不推薦)。如今進入Tomcat目錄了吧,若是是那麼你又向成功邁進了一步。
################################################################
來自http://www.kafeitu.me/2010/11/05/sso-cas-full-course.html。
文章寫的很好,也很細緻。
嗯。好了,問題來了。
當我啓動Tomcat時發現控制檯報錯以下:
直接Google,不少答案都是不啓用APR,修改conf/server.xml註釋掉下面一段
例如: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! 搞定了。