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