KeyStore和TrustStore


筆者的這篇文章參考了http://docs.oracle.com/cd/E19509-01/820-3503/ggfgo/index.html

KeyStore和TrustStore在很多HTTPS雙向配置的文章中基本沒有明白的,可能是因為當前的HTTPS網站太少,得不到重視,都是照着別人的抄一遍,然后運行一下。

KeyStore是服務器的密鑰存儲庫,存服務器的公鑰私鑰證書

TrustStore是服務器的信任密鑰存儲庫,存CA公鑰,但有一部分人存的是客戶端證書集合,這樣並不合適

下面是幾個常見的錯誤

1.KeyStore和TrustStore做成同一個JKS文件或PKCS12文件。通過導入客戶端證書來實現驗證客戶端證書。實際生產中並不能這么做,客戶端有成千上萬個,你不可能都去導吧。

2.openssl生成CA、server、client證書,用同樣的方法轉成PKCS12文件,KeyStore指定server.p12,TrustStore指定CA.p12、瀏覽器證書個人存儲區存client.p12,受信任的根證書頒發機構存CA.p12,總體思路是對的,但是CA這里這里絕對不能將私鑰也導入到PKCS12中,一個正常的CA要是把CA私鑰泄露了那不就慘了。

下面進入主題

一、生成JKS格式的KeyStore

JKS與其他密鑰存儲可有一個區別就是,不僅密鑰存儲庫可以設置密碼,並且里面的條目也可以設置密碼,條目如果不設置密碼默認與密鑰庫密碼一致,條目可以存證書、密鑰對,但是私鑰不能直接導出
1.生成密鑰庫

不能單純的生成一個密鑰庫,生成密鑰庫的時候必須同時生成一個條目
下面這個命令在當前工作目錄生成了一個密鑰庫文件clientkeystore,里面存儲了一個別名為client的密鑰對

keytool -keystore clientkeystore -genkey -alias client

生成的時候提示:您的名字與姓氏是什么?(What is your first and last name?)
這一步填服務器的域名即可,必須填

2.生成證書請求文件

根據client密鑰對生成證書請求文件,這個文件client.csr用於CA簽名

keytool -keystore clientkeystore -certreq -alias client -keyalg rsa -file client.csr

比較常見的CA有:http://www.verisign.com

如果簽署的證書在CA證書鏈中,那么導入cer文件即可,如果不在證書鏈中(比如我們自己創建的CA),你就需要導入CA證書文件

3.導入CA證書文件

下面這個命令用於導入CA證書文件

keytool -import -keystore clientkeystore -file CARoot.cer -alias theCARoot

4.導入簽名后的證書文件

如果CA對client.csr簽名了,那么你會得到一個client.cer的證書文件,下面你可以導入這個簽名后的證書文件

keytool -import -keystore clientkeystore -file client.cer -alias client

二、生成PKCS12格式的KeyStore

JKS格式的密鑰存儲庫不能導出私鑰,這是個缺陷,下面我們來看PKCS12格式
下面都是用openssl工具來生成

下面這個命令是將pem格式的私鑰mykey.pem.txt與pem格式的證書mycertificate.pem.txt合並成一個文件mykeycertificate.pem.txt

cat mykey.pem.txt mycertificate.pem.txt>mykeycertificate.pem.txt

將上面合並的文件作為一個條目存儲pkcs12存儲庫中,生成過程中必須輸入密碼

openssl pkcs12 -export -in mykeycertificate.pem.txt -out mykeystore.pkcs12 -name myAlias -noiter -nomaciter

三、生成TrustStore

命令

keytool -import -file C:\cascerts\firstCA.cert -alias firstCA -keystore myTrustStore

如果是多級CA,可能還需要導入secondCA和thirdCA


免責聲明!

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



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