使用CA簽發的服務器證書搭建Tomcat雙向SSL認證服務
第一部分,先說證書的申請。
這步是要到正規的CA公司申請正式的設備證書必須走的步驟。
1、先生成證書的密鑰對
打開命令行,切換到某個自己新建的目錄下,執行如下命令
keytool -genkey -keyalg RSA -keysize 1024 -dname “CN=www.javastar.org,OU=翊天閣,O=翊天閣,L=南京市,ST=江蘇省,C=CN” -alias server -keypass 123456 -keystore server.jks -storepass 123456 -validity 365
這裏說明一下幾個重要的地方,CN=www.javastar.org,這裏的www.javastar.org
OU=翊天閣,O=翊天閣,這裏可以替換成你自己的組織名稱,或者公司名稱。
-validity 365這裏聲明證書有效期為1年。
其他的參數自己可以參考keytool的使用幫助或相關文檔。
好了,成功執行上面的命令後,我們在當前命令行所在目錄得到server.jks文件,這個就是包含密鑰對的基本證書信息庫文件。
2、導出證書請求文件
keytool -certreq -alias server -sigalg “SHA1withRSA” -file server.pem -keypass 123456 -keystore server.jks -storepass 123456
這裏可以得到一個server.pem的文件。
3、向CA公司申請簽發設備證書
將上一步得到的server.pem證書發送給相關的CA公司,CA公司會通過這個申請簽發一張設備證書,最後我們會得到一個.cer的文件,比如server.cer。
同時,我們要取得該CA公司的證書鏈,比如會有CA_ROOT.cer和CA_CA.cer,第一張為CA公司的根證書,第二張為CA公司的簽名證書。
4、將CA根證書導入服務器證書庫
keytool -import -alias CA_ROOT -keystore server.jks -trustcacerts -storepass 123456 -file CA_ROOT.cer
5、將CA簽名證書導入服務器證書庫
keytool -import -alias CA_CA -keystore server.jks -trustcacerts -storepass 123456 -file CA_CA.cer
6、使用CA簽發的證書回復我們自己生成的包含私鑰的證書
keytool -import -alias server -keystore server.jks -trustcacerts -storepass 123456 -file server.cer
7、導出回復成功後的服務器證書
keytool -export -alias server -storepass 123456 -file javastar.org.cer -keystore server.jks
好了,到這裏我們需要的設備證書已經ok了。
最後對我們實際有用的是兩個文件:server.jks,是服務器證書庫,存儲了含有私鑰的服務器證書,及其證書鏈,這個就是主要的設備證書了,是放在服務器的SSL配置裏面;還有一個是javastar.org.cer,這個是只包含服務器證書公鑰的設備證書,是發給用戶,讓用戶放入自己的可信任庫的。
第二部分,配置Tomcat的SSL雙向鏈接
1、準備客戶端證書
keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore client.p12 -dname “CN=Client,OU=javastar.org,L=nj,ST=js,C=cn” -storepass 123456 -keypass 123456 -validity 365
執行完畢,我們會得到一張p12的客戶證書client.p12。
2、導出.cer格式的客戶證書
keytool -export -alias client -keystore client.p12 -storetype PKCS12 -storepass 123456 -rfc -file client.cer
執行完畢得到client.cer證書。
3、將客戶端證書導入服務器的可信任證書庫
keytool -import -v -file client.cer -keystore servertrust.keystore -storepass 123456
執行完畢得到servertrust.keystore,這個是給tomcat服務器端用的。
4、將服務器證書導入客戶端可信任證書庫
keytool -import -v -file javastar.org.cer -keystore clienttrust.keystore -storepass 123456
執行完畢會得到clienttrust.keystore證書庫,留著備用。同時,也可以同樣的方法,把CA_ROOT.cer和CA_CA.cer導入。
5、在和tomcat的bin目錄並行的目錄下新建一個cert文件夾,把server.jks和servertrust.keystore文件拷貝進去。
6、找到tomcat的server.xml文件,找到如下的內容
<!–
<Connector port=”8443″ protocol=”HTTP/1.1″ SSLEnabled=”true”
maxThreads=”150″ scheme=”https” secure=”true”
clientAuth=”false” sslProtocol=”TLS” />
–>
去掉註釋,並修改為
<Connector port=”8443″ protocol=”HTTP/1.1″ SSLEnabled=”true”
maxThreads=”500″ scheme=”https” secure=”true”
clientAuth=”true” sslProtocol=”TLS”
keystoreFile=”D:/apache-tomcat-6.0.20/cert/server.jks” keystorePass=”123456″
truststoreFile=”D:/apache-tomcat-6.0.20/cert/servertrust.keystore” truststorePass=”123456″/>
這裏註意把D:/apache-tomcat-6.0.20/cert修改為你的tomcat實際的路徑。
7、啟動或者重啟tomcat,在瀏覽器中導入client.p12的證書,然後,在地址欄輸入https://www.javastar.org:8443,就會彈出證書選擇框,選擇證書後,就可以使用SSL協議訪問tomcat服務器了。
第三部分,在程序中如何建立與服務器的SSL雙向認證鏈接
其實這個就簡單了,以java為例,比如我們現在要訪問一個通過SSL雙向認證保護的WebService接口,只需要在生成的客戶端程序中開始部分加入
System.setProperty(“javax.net.ssl.keyStore”, “D:/client.p12″);
System.setProperty(“javax.net.ssl.keyStorePassword”, “123456″);
System.setProperty(“javax.net.ssl.keyStoreType”, “PKCS12″);
System.setProperty(“javax.net.ssl.trustStore”, “D:/clienttrust.keystore”);
System.setProperty(“javax.net.ssl.trustStorePassword”, “123456″);
System.setProperty(“javax.net.ssl.trustStoreType”, “JKS”);
JVM會自動將證書提交給服務器驗證,由於服務器證書也在我們的可信任庫,也會自動信任服務器端的證書。
下面的代碼可以在需要的時候清除以上的環境內容
System.clearProperty(“javax.net.ssl.keyStore”);
System.clearProperty(“javax.net.ssl.keyStorePassword”);
System.clearProperty(“javax.net.ssl.keyStoreType”);
System.clearProperty(“javax.net.ssl.trustStore”);
System.clearProperty(“javax.net.ssl.trustStorePassword”);
System.clearProperty(“javax.net.ssl.trustStoreType”);
轉自https://blog.csdn.net/lucett/article/details/6845386
使用CA簽發的服務器證書搭建Tomcat雙向SSL認證服務