openssl 自簽名證書 - 制作證書(二)

【上一篇: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)容如下圖顯示:

openssl默認(rèn)配置部分截圖

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】
證書已添加到密鑰庫中

現(xiàn)在就可以使用ca證書,server端證書和私鑰,client端證書和私鑰開始socket編程了...

【下一篇:openssl 自簽名證書 - socket編程應(yīng)用(三)】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 證書的三個作用 加密通信和身份驗(yàn)證(驗(yàn)證對方確實(shí)是對方聲稱的對象)和數(shù)據(jù)完整性(無法被修改,修改了會被知) 證...
    SuperRoot閱讀 12,460評論 1 11
  • CA和證書安全協(xié)議(SSL/TLS)OpenSSH 一、CA和證書 (一) PKI(Public Key Infr...
    哈嘍別樣閱讀 1,520評論 0 0
  • 1 概述 本文之所以稱之為半自動化,是因?yàn)樽C書的申請并非日常工作,只是一段時間才需要申請,同時,在創(chuàng)建證書和辦法證...
    ghbsunny閱讀 2,313評論 0 1
  • 深夜,都早早睡去…… 沒有困意,也不知道做點(diǎn)什么,隨便下載了個這…不懂,也不會玩。 開啟第一篇文字,沒有頭腦,沒有...
    Yz各有所愛閱讀 155評論 0 0
  • 時間不但會讓一個人進(jìn)步,還會讓人退化,而且這種變化往往同步進(jìn)行。我不期待一個多么完善的自己,只希望逐漸擁有...
    Intelligentlema閱讀 695評論 0 0

友情鏈接更多精彩內(nèi)容