在Tomcat 6中配置SSL雙向認證是相當容易的,本文將介紹如何使用JDK的keytool來(lái)為Tomcat配置雙向SSL認證。并實(shí)現批量生成證書(shū) 系統需求:JDK 5.0
Tomcat 6.0.16
啟動(dòng)命令行:
第一步:為服務(wù)器生成證書(shū)
使用keytool為Tomcat生成證書(shū),假定目標機器的域名是localhost或者“192.168.1.1”,keystore文件存放在“D:/downloads/tomcat.keystore”,口令為“logiscn”,使用如下命令生成:
keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:/downloads/tomcat.keystore -dname "CN=192.168.1.1,OU=logiscn,O=logis,L=beijing,ST=beijing,C=CN" -validity 3650 -storepass logiscn -keypass logiscn
如果Tomcat所在服務(wù)器的域名不是“localhost”,應改為對應的域名,如[url]www.baidu.com[/url] 或者IP地址,否則瀏覽器會(huì )彈出警告窗口,提示用戶(hù)證書(shū)與所在域不匹配。
第二步:為客戶(hù)端生成證書(shū) 下一步是為瀏覽器生成證書(shū),以便讓服務(wù)器來(lái)驗證它。假設文件存放在D:/downloads/p12/tianli.p12,為了能將證書(shū)順利導入至IE和Firefox,證書(shū)格式應該是PKCS12,因此,使用如下命令生成:
keytool -genkey -v -alias tianli -keyalg RSA -storetype PKCS12 -keystore D:/downloads/p12/tianli.p12 -dname "CN=tianli,OU=logiscn,O=logis,L=beijing,ST=beijing,C=CN" -validity 3650 -storepass tianli -keypass tianli"
-validity為有效期限,目前的設置為10年,keypass用于在導入瀏覽器時(shí)使用的密碼,如果密碼不正確,則不能正確導入到瀏覽器。
對應的證書(shū)庫存放在“D:/downloads/p12/tianli.p12”,客戶(hù)端的CN可以是任意值。
第三步:讓服務(wù)器信任客戶(hù)端證書(shū)
由于是雙向SSL認證,服務(wù)器必須要信任客戶(hù)端證書(shū),因此,必須把客戶(hù)端證書(shū)添加為服務(wù)器的信任認證。由于不能直接將PKCS12格式的證書(shū)庫導入,我們必須先把客戶(hù)端證書(shū)導出為一個(gè)單獨的CER文件,使用如下命令:
keytool -export -alias tianli -keystore D:/downloads/p12/tianli.p12 -storetype PKCS12 -storepass tianli -rfc -file D:/downloads/cert/tianli.cer
通過(guò)以上命令,客戶(hù)端證書(shū)就被我們導出到“D:/downloads/cert/tianli.cer r”文件了。下一步,是將該文件導入到服務(wù)器的證書(shū)庫,添加為一個(gè)信任證書(shū):
keytool -import -alias tianli -v -file D:/downloads/cert/tianli.cer -keystore D:/downloads/tomcat.keystore -storepass logiscn <myint.inf
由于在導入的過(guò)程中需要輸入Y或者n在此處直接使用一個(gè)文件myint.inf代替輸入,myint.inf是一個(gè)文本文件,里面的內容只有y和一個(gè)回車(chē)
通過(guò)list命令查看服務(wù)器的證書(shū)庫,我們可以看到兩個(gè)輸入,一個(gè)是服務(wù)器證書(shū),一個(gè)是受信任的客戶(hù)端證書(shū):
第四步:配置Tomcat服務(wù)器
打開(kāi)Tomcat根目錄下的/conf/server.xml,找到如下配置段,修改如下:
打開(kāi)注釋
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile=" D:/downloads/tomcat.keystore " keystorePass="logiscn "
truststoreFile=" D:/downloads/tomcat.keystore " truststorePass="logiscn "
/>
其中,clientAuth指定是否需要驗證客戶(hù)端證書(shū),如果該設置為“false”,則為單向SSL驗證,SSL配置可到此結束。如果clientAuth設置為“true”,表示強制雙向SSL驗證,必須驗證客戶(hù)端證書(shū)。如果clientAuth設置為“want”,則表示可以驗證客戶(hù)端證書(shū),但如果客戶(hù)端沒(méi)有有效證書(shū),也不強制驗證。
第五步:導入客戶(hù)端證書(shū)
如果設置了clientAuth="true",則需要強制驗證客戶(hù)端證書(shū)。雙擊“D:/downloads/p12/tianli.p12”即可將證書(shū)導入至IE:導入證書(shū)后,即可啟動(dòng)Tomcat,用IE進(jìn)行訪(fǎng)問(wèn)。輸入[url]https://IPAdress/[/url] ,https協(xié)議默認的訪(fǎng)問(wèn)端口為443。以上所寫(xiě)大都為借鑒網(wǎng)上的資料。 為了實(shí)現每人發(fā)放一個(gè)證書(shū),如果重復以上的操作也可以達到目的,考慮到需要進(jìn)行大量的測試,并且在不同的機器上部署,就想到使用程序自動(dòng)生成命令的方法。
生成命令的程序是使用java 寫(xiě)的,生成命令需要預先設置如下的幾項:
1. Basedir生成的命令文件的位置,生成的命令運行后生成cer和p12格式的文件,為了區分存放,需要建立兩個(gè)文件夾,因此需要與一個(gè)基本目錄,
2. 生成的keyStore文件需要一個(gè)密碼,為了安全起見(jiàn),不同的域名的keyStore需要不同的密碼。
3. 域地址,如果域地址不正確,則會(huì )在整數上發(fā)出警告。因此對于不同的域,地址是不同的。
完成以上的三個(gè)設置之后就可以生成命令了。生成的文件包括3個(gè),全部存放在Basedir下。
1. Myint.inf文件,僅僅用于輸入內容很簡(jiǎn)單包括y 和一個(gè)回車(chē)
2. Conf的文件,里面包括了生成的配置文件片段和一段簡(jiǎn)單的使用說(shuō)明,內容如下
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="D:/downloads/tomcat.keystore"
keystorePass="logiscn"
truststoreFile="D:/downloads/tomcat.keystore"
truststorePass="logiscn"/>
使用的時(shí)候直接復制到相應的server.xml中
3. 可執行的命令文件command.bat,執行上述命令之前,需要建立兩個(gè)文件夾,以便于把生成的文件存放到合適的位置,部分代碼如下mkdir cert
mkdir p12
keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:/downloads/tomcat.keystore -dname "CN=localhost,OU=logiscn,O=logis,L=beijing,ST=beijing,C=CN" -validity 3650 -storepass logiscn -keypass logiscn
rem 為 tianli 生成證書(shū)
rem 第二步:為客戶(hù)端生成證書(shū)
keytool -genkey -v -alias tianli -keyalg RSA -storetype PKCS12 -keystore D:/downloads/p12/tianli.p12 -dname "CN=tianli,OU=logiscn,O=logis,L=beijing,ST=beijing,C=CN" -validity 3650 -storepass tianli -keypass tianli"
rem 第三步:讓服務(wù)器信任客戶(hù)端證書(shū)
keytool -export -alias tianli -keystore D:/downloads/p12/tianli.p12 -storetype PKCS12 -storepass tianli -rfc -file D:/downloads/cert/tianli.cer"
keytool -import -alias tianli -v -file D:/downloads/cert/tianli.cer -keystore D:/downloads/tomcat.keystore -storepass logiscn <myint.inf
Java程序的實(shí)現見(jiàn)附件,這樣雙擊執行程序就可以批量生成證書(shū)。相當方便。