最近由於工做須要,因此略微瞭解了下CA認證,簡單作了個demo。html
對於基礎知識能夠參考web
http://blog.csdn.net/guzicheng/article/details/38610621算法
http://blog.csdn.net/guzicheng/article/details/38610689?ABstrategy=codes_snippets_optimize_v3apache
http://www.cnblogs.com/sdjnzqr/p/4277092.html跨域
我的以爲這幾篇文章介紹的挺全面的。瀏覽器
下面是本人在作demo時順手記下的。tomcat
1、爲服務器生成證書服務器
一、 cmd進入命令行工具
二、 cd進入c盤根目錄 或 jdk的bin目錄下ui
三、 使用keytool命令生成證書
keytool -genkey -alias tomcat -keypass 111111 -keyalg RSA -keysize 1024 -validity 365 -keystore D:/keys/tomcat.keystore -storepass 111111
註釋:
-alias tomcat(別名)
-keypass 123456(別名密碼)
-keyalg RSA(算法)
-keysize 1024(密鑰長度)
-validity 365(有效期,天單位)
-keystore D:/keys/tomcat.keystore(指定生成證書的位置和證書名稱)
-storepass 123456(獲取keystore信息的密碼)
注:1)D:/keys/ 目錄須要提早手動建立好,不然會生成失敗
2)「您的名字與姓氏是什麼」 輸入域名,不要輸入IP地址
2、爲客戶端生成證書
爲了能將證書順利導入至IE和Firefox,證書格式應該是PKCS12,
keytool -genkey -alias client -keypass 111111 -keyalg RSA -keysize 1024 -validity 365 -storetype PKCS12 -keystore D:/keys/client.p12 -storepass 111111
3、讓服務器信任客戶端證書
一、 因爲不能直接將PKCS12格式的證書庫導入,因此必須先把客戶端證書導出爲一個單獨的CER文件
keytool -export -alias client -keystore D:/keys/client.p12 -storetype PKCS12 -keypass 111111 -file D:/keys/client.cer
二、 將該文件導入到服務器的證書庫,添加一個信任證書
keytool -import -v -file D:/keys/client.cer -keystore D:/keys/tomcat.keystore -storepass 111111
完成以後經過list命令能夠查看服務端的證書庫
keytool -list -v -keystore D:/keys/tomcat.keystore
4、讓客戶端信任服務器證書
一、 因爲雙向SSL認證,客戶端也要驗證服務端證書,所以,必須把服務端證書添加到瀏覽器的「受信任的根證書頒發機構」。
因爲不能直接將keystore格式的證書庫導入,必須先報服務器證書導出爲一個單獨的CER文件
keytool -keystore D:/keys/tomcat.keystore -export -alias tomcat -file D:/keys/server.cer
二、 雙擊server.cer文件,安裝提示安裝證書,將證書填入到「受信任的根證書頒發機構」。打開瀏覽器 - 工具 - internet選項-內容- 證書-把中級證書頒發機構裏的www.localhost.com(該名稱即時你前面生成證書時填寫的名字與姓氏)證書導出來-再把導出來的證書導入 受信任的根頒發機構 就OK了。
5、配置tomcat服務器
一、 Tomcat \conf下的server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
maxHttpHeaderSize = "8192" <!--屬性值須要設置的大一點,不然會出現further occurrences of HTTP header parsing errors will be logged at DEBUG level.這個錯誤 -->
redirectPort="8443" />
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11Protocol" <!--若是是jdk1.6屬性值設置爲HTTP/1.1,1.7則設置爲org.apache.coyote.http11.Http11Protocol -->
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:/keys/tomcat.keystore" keystorePass="111111"
truststoreFile="D:/keys/tomcat.keystore" truststorePass="111111"/>
二、 Tomcat \conf下的web.xml
<login-config>
<!-- Authorization setting for SSL -->
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection >
<web-resource-name >SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
三、 屬性說明:
clientAuth:設置是否雙向驗證,默認爲false,設置爲true表明雙向驗證
keystoreFile:服務器證書文件路徑
keystorePass:服務器證書密碼
truststoreFile:用來驗證客戶端證書的根證書,此例中就是服務器證書
truststorePass:根證書密碼
四、 注意:
① 設置clientAuth屬性爲True時,須要手動導入客戶端證書才能訪問。
② 要訪問https請求 須要訪問8443端口,訪問http請求則訪問Tomcat默認端口(你本身設置的端口,默認8080)便可。
6、配置web-info/web.xml
<!-- 強制SSL,即http請求自動跳轉成https -->
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/*</url-pattern><!-- 全站使用SSL -->
</web-resource-collection>
<user-data-constraint>
<description>SSL required</description>
<!-- CONFIDENTIAL: 確保傳輸數據不被修改,不能被查看-->
<!-- INTEGRAL: 確保傳輸數據不被修改 -->
<!-- NONE: 不作特殊限制-->
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
7、將服務導入jdk的cacerts中
keytool -import -alias tomcatsso -file "D:\keys\server.cer" -keystore "C:\Program Files\Java\jdk1.7.0_09\jre\lib\security\cacerts" -storepass changeit
寫在最後,運用了證書認證後,系統會出現跨域問題,要注意!