CA(Certificate Authority)是數字證書認證中心的簡稱。是指發放、管理、廢除數字證書的機構。網絡
CA的做用是檢查證書持有者身份的合法性。並簽發證書(在證書上簽字),以防證書被僞造或篡改。以及對證書和密鑰進行管理。post
遵循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. 經過控制檯可以雙向發送消息。