JDK自帶工具keytool生成ssl證書

最近由於工做須要,因此略微瞭解了下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  

寫在最後,運用了證書認證後,系統會出現跨域問題,要注意!

相關文章
相關標籤/搜索