1.生成CA證書和私鑰
如果你准備使用公共CA則不需要這一步,但是如果這個證書只是在我們自己的服務端和客戶端之間使用則只需要使用自己的CA
使用openssl之前先要在當前目錄下准備一個臨時目錄結構,如下結構
--demoA/ |-- index.txt <-- 初始為空白內容 |-- serial <-- 初始內容可以設置為01 |-- newcerts/ <-- 空文件夾 |-- private/ <-- 貌似可以不存在
創建CA私鑰
openssl genrsa -out ca.key 2048
創建CA證書
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/C=CN/ST=ZheJiang/L=HangZhou/O=NetEase/OU=CA Test"
2.生成服務器證書簽署請求和私鑰
創建服務器私鑰
openssl genrsa -out server.key 2048
創建服務器證書簽署請求CSR
openssl req -new -days 365 -key server.key -out server.csr -subj "/C=CN/ST=ZheJiang/L=HangZhou/O=NetEase/OU=XX Server/CN=xxx.yyy.com"
3.使用自己的CA進行簽署證書
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
需要輸入2次確認的y
4.合並證書
使用文本工具打開server.crt
文件,可以看到內容有2部分組成,第一部分是Certificate開頭的描述內容,第二部分是-----BEGIN CERTIFICATE-----開始的簽名內容,我們把ca.crt的內容覆蓋掉描述內容,讓文件成為2個簽名塊,就可以看到
-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----
5.轉換為pkcs12格式
openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.p12
需要輸入一個密碼
6.轉換為jks格式
keytool -importkeystore -srckeystore server.p12 -destkeystore server.jks -srcstoretype pkcs12 -deststoretype jks
keytool是jdk的工具,安裝好jdk可以找到
然后我們可以驗證下jks是否包含了完整的證書鏈
keytool -list -v -keystore server.jks
我們可以看到如下信息
別名名稱: 1
創建日期: 2015-5-28
項類型: PrivateKeyEntry
認證鏈長度: 2
認證 [1]:
所有者:CN=xxx.yyy.com, OU=XX Server, O=NetEase, ST=ZheJiang, C=CN
簽發人:OU=CA Test, O=NetEase, L=HangZhou, ST=ZheJiang, C=CN
序列號:1
有效期: Thu May 28 14:35:55 CST 2015 至Fri May 27 14:35:55 CST 2016