OpenSSL生成根證書CA及簽發子證書

系統:CentOS7 32位

目標:使用OpenSSL生成一個CA根證書,並用這個根證書頒發兩個子證書server和client。

先確保系統中安裝了OpenSSL,若沒安裝,可以通過以下命令安裝:

?

1
sudo yum install openssl

修改OpenSSL的配置

安裝好之後,定位一下OpenSSL的配置文件openssl.cnf:

?

1
locate openssl.cnf

132715_aC8K_1434710.bmp

如圖,我這裏的目錄是/etc/pki/tls/openssl.cnf。

修改配置文件,修改其中的dir變量,重新設置SSL的工作目錄:

133703_4jgc_1434710.png

由於配置文件中,dir變量下還有幾個子文件夾需要用到,因此在自定義的文件夾下面也創建這幾個文件夾或文件,它們是:

141401_y7ay_1434710.png

certs——存放已頒發的證書

newcerts——存放CA指令生成的新證書

private——存放私鑰

crl——存放已吊銷的整數

index.txt——OpenSSL定義的已簽發證書的文本數據庫文件,這個文件通常在初始化的時候是空的

serial——證書籤發時使用的序列號參考文件,該文件的序列號是以16進制格式進行存放的,該文件必須提供並且包含一個有效的序列號

生成證書之前,需要先生成一個隨機數:

?

1
openssl rand -out private/.rand 1000

該命令含義如下:

rand——生成隨機數

-out——指定輸出文件

1000——指定隨機數長度

生成根證書

a).生成根證書私鑰(pem文件)

OpenSSL通常使用PEM(Privacy Enbanced Mail)格式來保存私鑰,構建私鑰的命令如下:

?

1
openssl genrsa -aes256 -out private/cakey.pem 1024

143654_AoUE_1434710.png

該命含義如下:

genrsa——使用RSA算法產生私鑰

-aes256——使用256位密鑰的AES算法對私鑰進行加密

-out——輸出文件的路徑

1024——指定私鑰長度

b).生成根證書籤發申請文件(csr文件)

使用上一步生成的私鑰(pem文件),生成證書請求文件(csr文件):

?

1
2
openssl req -new -key private/cakey.pem -out private/ca.csr -subj \
"/C=CN/ST=myprovince/L=mycity/O=myorganization/OU=mygroup/CN=myname"

152612_Ulk8_1434710.png

該命令含義如下:

req——執行證書籤發命令

-new——新證書籤發請求

-key——指定私鑰路徑

-out——輸出的csr文件的路徑

-subj——證書相關的用戶信息(subject的縮寫)

c).自簽發根證書(cer文件)

csr文件生成以後,可以將其發送給CA認證機構進行簽發,當然,這裏我們使用OpenSSL對該證書進行自簽發:

?

1
2
openssl x509 -req -days 365 -sha1 -extensions v3_ca -signkey \
private/cakey.pem -in private/ca.csr -out certs/ca.cer

152740_yYK9_1434710.png

該命令的含義如下:

x509——生成x509格式證書

-req——輸入csr文件

-days——證書的有效期(天)

-sha1——證書摘要採用sha1算法

-extensions——按照openssl.cnf文件中配置的v3_ca項添加擴展

-signkey——簽發證書的私鑰

-in——要輸入的csr文件

-out——輸出的cer證書文件

之後看一下certs文件夾裏生成的ca.cer證書文件:

152922_iD3K_1434710.png

用根證書籤發server端證書

和生成根證書的步驟類似,這裏就不再介紹相同的參數了。

a).生成服務端私鑰

?

1
openssl genrsa -aes256 -out private/server-key.pem 1024

b).生成證書請求文件

?

1
2
openssl req -new -key private/server-key.pem -out private/server.csr -subj \
"/C=CN/ST=myprovince/L=mycity/O=myorganization/OU=mygroup/CN=myname"

c).使用根證書籤發服務端證書

?

1
2
openssl x509 -req -days 365 -sha1 -extensions v3_req -CA certs/ca.cer -CAkey private/cakey.pem \
-CAserial ca.srl -CAcreateserial -in private/server.csr -out certs/server.cer

這裏有必要解釋一下這幾個參數:

-CA——指定CA證書的路徑

-CAkey——指定CA證書的私鑰路徑

-CAserial——指定證書序列號文件的路徑

-CAcreateserial——表示創建證書序列號文件(即上方提到的serial文件),創建的序列號文件默認名稱爲-CA,指定的證書名稱後加上.srl後綴

注意:這裏指定的-extensions的值爲v3_req,在OpenSSL的配置中,v3_req配置的basicConstraints的值爲CA:FALSE,如圖:

145405_I71X_1434710.png

而前面生成根證書時,使用的-extensions值爲v3_ca,v3_ca中指定的basicConstraints的值爲CA:TRUE,表示該證書是頒發給CA機構的證書,如圖:

145718_5CsH_1434710.png

在x509指令中,有多重方式可以指定一個將要生成證書的序列號,可以使用set_serial選項來直接指定證書的序列號,也可以使用-CAserial選項來指定一個包含序列號的文件。所謂的序列號是一個包含一個十六進制正整數的文件,在默認情況下,該文件的名稱爲輸入的證書名稱加上.srl後綴,比如輸入的證書文件爲ca.cer,那麼指令會試圖從ca.srl文件中獲取序列號,可以自己創建一個ca.srl文件,也可以通過-CAcreateserial選項來生成一個序列號文件。

用根證書籤發client端證書

和簽發server端的證書的過程類似,只是稍微改下參數而已。

a).生成客戶端私鑰

?

1
openssl genrsa -aes256 -out private/client-key.pem 1024

b).生成證書請求文件

?

1
2
openssl req -new -key private/client-key.pem -out private/client.csr -subj \
"/C=CN/ST=myprovince/L=mycity/O=myorganization/OU=mygroup/CN=myname"

c).使用根證書籤發客戶端證書

?

1
2
openssl x509 -req -days 365 -sha1 -extensions v3_req -CA certs/ca.cer -CAkey private/cakey.pem \
-CAserial ca.srl -in private/client.csr -out certs/client.cer

需要注意的是,上方簽發服務端證書時已經使用-CAcreateserial生成過ca.srl文件,因此這裏不需要帶上這個參數了


至此,我們已經使用OpenSSL自簽發了一個CA證書ca.cer,並用這個CA證書籤發了server.cer和client.cer兩個子證書了:

153323_S39o_1434710.png

導出證書

a).導出客戶端證書

?

1
2
openssl pkcs12 -export -clcerts -name myclient -inkey \
private/client-key.pem -in certs/client.cer -out certs/client.keystore

參數含義如下:

pkcs12——用來處理pkcs#12格式的證書

-export——執行的是導出操作

-clcerts——導出的是客戶端證書,-cacerts則表示導出的是ca證書

-name——導出的證書別名

-inkey——證書的私鑰路徑

-in——要導出的證書的路徑

-out——輸出的密鑰庫文件的路徑

b).導出服務端證書

?

1
2
openssl pkcs12 -export -clcerts -name myserver -inkey \
private/server-key.pem -in certs/server.cer -out certs/server.keystore

c).信任證書的導出

?

1
2
keytool -importcert -trustcacerts -alias www.mydomain.com \
-file certs/ca.cer -keystore certs/ca-trust.keystore


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章