【上一篇:openssl 自簽名證書 - 安裝openssl(一)】
事前準(zhǔn)備
相關(guān):
pem、key:私鑰文件,對數(shù)據(jù)進(jìn)行加密解密
csr:證書簽名請求文件,將其提交給證書頒發(fā)機(jī)構(gòu)(ca、CA)對證書簽名
crt:由證書頒發(fā)機(jī)構(gòu)(ca、CA)簽名后的證書或者自簽名證書,該證書包含證書持有人的信息、持有人的公鑰以及簽署者的簽名等信息
關(guān)于證書相關(guān)格式轉(zhuǎn)換本文不做介紹
終端輸入命令:vim /usr/local/openssl/ssl/openssl.cnf,根據(jù)自己具體的安裝路徑查找openssl的默認(rèn)配置文件即可,部分內(nèi)容如下圖顯示:

dir:默認(rèn)的ssl工作目錄,可以修改默認(rèn)目錄,這里是安裝完默認(rèn)的
certs:存放已經(jīng)簽發(fā)的證書
newcerts:存放CA新生成的證書
private:存放私鑰
crl:存放已經(jīng)吊銷的證書
index.txt:已簽發(fā)證書的文本數(shù)據(jù)庫文件
serial:序列號存儲文件,序列號為16進(jìn)制數(shù)存儲供證書簽發(fā)使用序列號做參考
.rand:私有隨機(jī)文件,
生成隨機(jī)數(shù)命令:openssl rand -out xxx/.rand 1024
1024表示隨機(jī)數(shù)長度
在生成證書的臨時目錄里創(chuàng)建默認(rèn)配置目錄文件命令,一鍵梭哈:
mkdir -p ./demoCA/certs; mkdir -p ./demoCA/crl; mkdir ./democA/newcerts; mkdir -p ./demoCA/private; touch ./demoCA/index.txt; touch ./demoCA/serial; echo 01 > ./demoCA/serial;
創(chuàng)建自己生成證書的臨時文件夾:mkdir ~/Desktop/openssl_ssl
進(jìn)入文件夾:cd ~/Desktop/openssl_ssl,然后將之前提到過得【openssl.cnf】文件復(fù)制到此,開始制作證書用于之后的socket編程里
1. 制作ca根證書
1.1 生成ca根證書私鑰
openssl genrsa -aes256 -out ca.key 2048
genrsa:使用RSA算法生成私鑰
-aes256:使用256位密鑰的AES算法對私鑰進(jìn)行加密
-out:輸出文件路徑
2048:私鑰長度
輸入完命令會讓你輸入兩遍私鑰文件的密碼
1.2 生成ca根證書請求文件
openssl req -new -key ca.key -out ca.csr
req:執(zhí)行證書簽發(fā)命令
-new:新的證書簽發(fā)請求
-key:指定私鑰文件的路徑
-out:csr文件的輸出路徑
輸入完命令會讓你輸入ca根證書私鑰的密碼并填寫一些信息,如下所示:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
Country Name (2 letter code) [AU]:cn 【國家代碼兩個字母可為空,ca、server、client要一致】
State or Province Name (full name) [Some-State]:【省份,ca、server、client要一致】
Locality Name (eg, city) []:【城市】
Organization Name (eg, company) [Internet Widgits Pty Ltd]:【公司名,ca、server、client要一致】
Organizational Unit Name (eg, section) []:【組織名】
Common Name (e.g. server FQDN or YOUR name) []:【不可為空,全限定域名或名字】
Email Address []:【郵箱】Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:【輸入密碼】
An optional company name []:【可選的公司名】
上面輸入的ca請求信息在后續(xù)申請使用該ca證書簽名的請求證書要保證一致。
1.3自己作為ca機(jī)構(gòu)簽發(fā)根證書(自簽發(fā)證書)
openssl x509 -req -days 365 -signkey ca.key -in ca.csr -out ca.crt
x509:用于自簽名證書,生成x509格式的證書
-req:請求簽名
-days:證書有效期
-signkey:證書簽發(fā)的私鑰
-in:證書請求文件,有效的文件路徑
-out:ca簽名后的證書輸出路徑
2. 制作server端證書
用剛才的ca證書為使用端簽發(fā)證書
2.1 生成server端私鑰
openssl genrsa -aes256 -out server.key 2048
連續(xù)輸入兩次密碼
2.2 生成server端證書請求文件
openssl req -new -key server.key -out server.csr
同樣的會讓你輸入剛才私鑰的密碼,并填寫和ca根證書請求文件一樣的信息,兩者要保持一樣
2.3 使用ca根證書為server端簽發(fā)證書
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
-in:輸入證書簽名請求文件
-out:簽名后的證書輸出路徑
-cert:ca根證書
-keyfile:ca根證書私鑰文件
-config:配置文件
3 制作client端證書
套路和server端基本是一樣的,下面就直接上命令了
3.1 生成client端私鑰
openssl genrsa -aes256 -out client.key 2048
3.2 生成client端證書請求文件
openssl req -new -key client.key-out client.csr
3.3 使用ca根證書為client端簽發(fā)證書
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
文件變化:1. index.txt本地數(shù)據(jù)庫文本文件多了兩條信息、2. serial序列號文件的序列號遞增了、3. newcerts文件夾多了兩個證書、4. 其它...
到這里我們就可以結(jié)束了,我們已經(jīng)得到了ca.crt、server.key、server.crt、client.key、client.crt,我們就可以開始編程了。
雙向認(rèn)證要保證server、client端證書簽名的ca要一樣或者期限沒有過期否則會認(rèn)證失敗
【下一篇:openssl 自簽名證書 - socket編程應(yīng)用(三)】
4. 導(dǎo)出證書
4.1 導(dǎo)出server端證書
導(dǎo)出時會讓你輸入server端私鑰的密碼,即server-key.pem的密碼,驗(yàn)證通過后再輸入兩次證書導(dǎo)出的密碼
openssl pkcs12 -export -clcerts -name server-p12 -inkey server.key -in server.crt -out server-p12.keystore
4.2 導(dǎo)出client端證書
導(dǎo)出同server操作是一樣的,先輸入client-key.pem的密碼,在輸入兩次證書導(dǎo)出的密碼
openssl pkcs12 -export -clcerts -name client-p12 -inkey client.key -in client.crt -out client-p12.keystore
4.3 導(dǎo)出受信任的證書
keytool -importcert -trustcacerts -alias localhost -file ca-crt.cer -keystore ca-trust.keystore
終端顯示:
輸入密鑰庫口令:
再次輸入新口令:
所有者: EMAILADDRESS=【郵箱地址】, CN=127.0.0.1, OU=【組織名】, O=【公司】, L=【市】, ST=【省份】, C=cn【國家代碼】
發(fā)布者: EMAILADDRESS=【郵箱地址】, CN=127.0.0.1, OU=【組織名】, O=【公司名】, L=【市】, ST=【省份】, C=cn【國家代碼】
序列號: 4272b0ce733*************316f20cfe5f6a182
生效時間: Mon Jan 28 11:12:17 CST 2019, 失效時間: Tue Jan 28 11:12:17 CST 2020
證書指紋:
SHA1: C1:B6:C6:B3:95:8F:3C:12:B8:C4:AB:5E:8B:0D:03:6B:6D:B2:1E:D3
SHA256: 31:BF:B7:EA:F3:72:E9:28:95:55:41:76:F0:7B:24:19:2B:FF:C7:C4:AA:AE:63:EF:6C:98:69:5A:49:37:56:3F
簽名算法名稱: SHA256withRSA
主體公共密鑰算法: 2048 位 RSA 密鑰
版本: 1
是否信任此證書? [否]: y【終端輸入y/n】
證書已添加到密鑰庫中