openssl自簽名證書生成與單雙向驗證

什麼是CA:

CA(Certificate Authority)是數字證書認證中心的簡稱。是指發放、管理、廢除數字證書的機構。網絡

CA的做用是檢查證書持有者身份的合法性。並簽發證書(在證書上簽字),以防證書被僞造或篡改。以及對證書和密鑰進行管理。post

SSL證書中DN(Distiguish Name)識別名的結構:

        遵循x.500標準,標識名的目的就是爲每個網絡實體提供一個惟一的名字。爲了達到這一目的。DN有一種分層結構。一個DN由一些列的RDN(Relative distinguished name,相對標識名)構成。ui

        RDN的乘此結構依次爲:spa

C = US, ST = Beijing, L = Beijing, O = RTFM, OU = Consulting, CN = Ericserver

(C->Country, ST-> State or Provice Name, L->Locality Name, O->Organization, OU->Organization Unit, CN->Common Name)ssl

 

生成自簽名證書的步驟:

1、創建CA

1. 在隨意目錄創建目錄,目錄名稱隨意

/home/gouxu/gx/key/字符串

2. 進入到新創建的目錄key

cd /home/gouxu/gx/key/openssl

3. 生成CA私鑰

openssl genrsa -out ca.key 2048 it

參數說明:io

genrsa:生成rsa祕鑰;

-out ca.key 生成的祕鑰文件爲ca.key;

2048: 祕鑰長度爲2048.

4. 用CA私鑰生成CA的證書

openssl req -new -x509 -days 36500 -key ca.key -out ca.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=Teamsun/OU=Teamsun"

(-x509選項會生成自簽名證書。)

5. 創建CA對應文件夾

進入到key目錄運行例如如下命令:

mkdir demoCA

cd demoCA/

mkdir newcerts

touch index.txt

echo '01' > serial

2、生成server端證書

1. 進入key目錄

cd key/

2. 生成server私鑰

openssl genrsa -out server.key 2048

3. 使用server私鑰生成server端證書請求文件

openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Teamsun/OU=guoxu/CN=guoxu"

(沒有-x509選項則生成證書請求文件。)

4. 使用server證書請求文件經過CA生成自簽名證書

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key

5. 驗證server證書

gouxu@gouxu-pc:~/gx/key$ openssl verify -CAfile ca.crt server.crt 

server.crt: OK

gouxu@gouxu-pc:~/gx/key$ 

 

3、雙向認證需要生成client證書

1. 進入key目錄

cd key/

2. 生成client私鑰

openssl genrsa -out client.key 2048

3. 使用client私鑰生成client端證書請求文件

openssl req -new -key client.key -out client.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Teamsun/OU=guog/CN=guog"

 

注意:假設出現例如如下錯誤需要更改OU域與CN域又一次生成證書請求文件。

Sign the certificate?

 [y/n]:y

failed to update database

TXT_DB error number 2

4. 使用client證書請求文件生成自簽名證書

openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key

5. 驗證client證書

gouxu@gouxu-pc:~/gx/test$ openssl verify -CAfile ca.crt client.crt 

client.crt: OK

gouxu@gouxu-pc:~/gx/test$

 

4、測試

4.1 使用server證書測試單向認證

1. 打開窗體1啓動server

gouxu@gouxu-pc:~/gx/test$ openssl s_server -accept 10001 -key server.key -cert server.crt 

Using default temp DH parameters

Using default temp ECDH parameters

ACCEPT

 

2. 打開窗體2啓動client

gouxu@gouxu-pc:~$ openssl s_client -connect localhost:10001

CONNECTED(00000003)

... ...

 

3. 鏈接成功後在隨意一個窗體輸入字符串會傳輸到另一個窗體回顯。

4.2 使用server證書和client證書作雙向測試

1. 打開窗體1啓動server

(帶有Verify參數,強制要求client證書)

gouxu@gouxu-pc:~/gx/test$ openssl s_server -accept 10001 -key server.key -cert server.crt -Verify 5

2. 打開窗體2啓動client

gouxu@gouxu-pc:~/gx/test$ openssl s_client -connect localhost:10001 -cert client.crt -key client.key 

3. 雙向證書正確則鏈接成功。不然鏈接失敗。

4. 經過控制檯可以雙向發送消息。

相關文章
相關標籤/搜索