使用jdk生成自簽發證書(過程總結)


前言:

最近在做華為NB-IoT接口開發,需要用到雙向認證,就去學了一下。

然后我將過程總結了一下。

 

相關華為論壇鏈接:http://developer.huawei.com/ict/forum/thread-25457.html

里面一些ca.jks和outgoing.CertwithKey.pkcs12相關步驟能看懂就看,看不懂沒關系。

 

一:為服務器生成證書
1. 找到jdk安裝目錄,運行控制台,切換到該目錄:

2、使用keytool命令生成證書tomcat.keystore

keytool -genkey -v -alias tomcat -keyalg RSA -keystore tomcat.keystore -validity 36500

 

以下是命令的參數介紹

keytool 

-genkey 

-alias tomcat(別名) 

-keypass 123456(別名密碼) 

-keyalg RSA(算法) 

-keysize 1024(密鑰長度) 

-validity 365(有效期,天單位) 

-keystore tomcat.keystore(指定生成證書的位置和證書名稱) 

-storepass 123456(獲取keystore信息的密碼)

二:為客戶端生成證書
1. 生成客戶端證書:client.p12(為瀏覽器生成證書,以便讓服務器來驗證它。為了能將證書順利導入至IE和Firefox,證書格式應該是PKCS12)
keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore client.p12 -validity 36500
三:讓服務器信任客戶端證書

由於不能直接將PKCS12格式的證書庫導入,必須先把客戶端證書導出為一個單獨的CER文件

1. 將client.p12轉換成client.cer;
keytool -export -alias client -keystore client.p12 -storetype PKCS12 -rfc -file client.cer
2. 將client.cer導入到tomcat的信任證書鏈中
keytool -import -alias client-v -file client.cer -keystore tomcat.keystore
 

完成之后通過list命令查看服務器的證書庫,

可以看到兩個證書,一個是服務器證書,一個是受信任的客戶端證書:

keytool -list -v -keystore tomcat.keystore

四:讓客戶端信任服務器證書

由於是雙向SSL認證

(1)、客戶端也要驗證服務器證書,因此,必須把服務器證書添加到瀏覽器的“受信任的根證書頒發機構”

(2)、服務器也要驗證客戶端提供的證書,因此,必須把client.p12證書添加到瀏覽器的“個人”證書里面(這步非常關鍵)。

由於不能直接將keystore格式的證書庫導入,必須先把服務器證書導出為一個單獨的CER文件

1. 把tomcat證書導出為tomcat.cer文件(導出根證書)
keytool -export -v -alias tomcat -file tomcat.cer -keystore tomcat.keystore

2、將tomcat.cer證書導入到受信任的根證書頒發機構,點擊導入,按照步驟添加

然后一直下一步,最后選“是”

3、將client.p12添加到個人證書

然后一直下一步,最后選“是”。密碼是之前生成客戶端證書時候的密碼。

五、配置tomcat的server.xml

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
               redirectPort="8443" SSLEnabled="true" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS"
               keystoreFile="C:\Program Files\Apache Software Foundation\Tomcat 8.5\tomcat.keystore" keystorePass="123456"
               truststoreFile="C:\Program Files\Apache Software Foundation\Tomcat 8.5\tomcat.keystore" truststorePass="123456"
               />
Connector標簽中的屬性說明:
clientAuth:設置是否雙向驗證,默認為false,設置為true代表雙向驗證
keystoreFile:服務器證書文件路徑
keystorePass:服務器證書密碼
truststoreFile:用來驗證客戶端證書的根證書,此例中就是服務器證書
truststorePass:根證書密碼
 
最后訪問8080端口,試下雙向是否成功,然后將clientAuth=“false”試下單向認證。博主試過了可以成功。
 
不懂歡迎提問!盡力解答
 
最后附上權威機構頒發證書的認證方法(單向認證): http://www.cnblogs.com/longLifeFrog/p/9067147.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM