2019-06-06-openssl生成自簽名ssl證書及證書鏈制作

openssl 是目前最流行的 SSL 密碼庫(kù)工具,其提供了一個(gè)通用、健壯、功能完備的工具套件,用以支持SSL/TLS 協(xié)議的實(shí)現(xiàn)。

以下為測(cè)試正式生成過程而做的實(shí)驗(yàn),基本模擬了整個(gè)證書的生成過程。

第一步,為服務(wù)器端和客戶端準(zhǔn)備公鑰、私鑰

生成服務(wù)器端私鑰
命令:

openssl genrsa -out server_pri.key 1024

// 生成服務(wù)器端公鑰

命令:

openssl rsa -in server_pri.key -pubout -out server_pub.pem

第二步,生成 CA 證書

// 生成 CA 私鑰
命令:
openssl genrsa -out ca.key 1024

命令:
openssl req -new -key ca.key -out ca.csr

//會(huì)出來一個(gè)填寫資料的界面,Common Name這一項(xiàng),是最后可以訪問的域名
命令:

openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt

第三步,生成服務(wù)器端證書

// 服務(wù)器端需要向 CA 機(jī)構(gòu)申請(qǐng)簽名證書,在申請(qǐng)簽名證書之前依然是創(chuàng)建自己的 CSR 文件
命令:

openssl req -new -key server_pri.key -out server.csr

// 向自己的 CA 機(jī)構(gòu)申請(qǐng)證書,簽名過程需要 CA 的證書和私鑰參與,最終頒發(fā)一個(gè)帶有 CA 簽名的證書
命令:

openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt

同樣會(huì)有信息填寫,照舊寫就好了

第四步,生成cer文件

//使用openssl 進(jìn)行轉(zhuǎn)換
命令:

openssl x509 -in server.crt -out server.cer -outform der

如果完成,就會(huì)得到這么9個(gè)文件

第五步 配置到服務(wù)器端nginx

server {
    listen 80;
    server_name www.cc.com;
    rewrite ^(.*)$ https://www.bb.com $1 permanent; 
}
server {
    listen 80;
    server_name www.bb.com;
    rewrite ^(.*)$ https://${server_name}$1 permanent; 
}
server {
    listen 443;
    server_name www.test.com;
    ssl on;
    ssl_certificate /data/csr/server.crt;
    ssl_certificate_key /data/csr/server_pri.key;
    location / {
        root /data/bb;
        index  index.html index.htm;
    }
}

解決證書鏈問題

證書鏈可以有任意環(huán)節(jié)的長(zhǎng)度,所以在三節(jié)的鏈中,信任錨證書CA 環(huán)節(jié)可以對(duì)中間證書簽名;中間證書的所有者可以用自己的私鑰對(duì)另一個(gè)證書簽名。CertPath API 可以用來遍歷證書鏈以驗(yàn)證有效性,也可以用來構(gòu)造這些信任鏈。

Web 瀏覽器已預(yù)先配置了一組瀏覽器自動(dòng)信任的根 CA 證書。來自其他證書授權(quán)機(jī)構(gòu)的所有證書都必須附帶證書鏈,以檢驗(yàn)這些證書的有效性。證書鏈?zhǔn)怯梢幌盗?CA 證書發(fā)出的證書序列,最終以根 CA 證書結(jié)束。

我們一般會(huì)有三種證書: RootCA.crt(rCA,被信任的根證書)、IntermediateCA.crt(mCA,某些廠商有多個(gè)中間證書)、server.crt(sCA,通過CSR簽下來的證書)

為了讓瀏覽器能夠信任我們的證書,我們需要配置一條完整的證書鏈,證書鏈由sCA和mCA構(gòu)成就好,rCA是瀏覽器內(nèi)置,不需要服務(wù)器給提供。

nginx配置證書鏈的時(shí)候,就是指定一個(gè)證書文件,這個(gè)文件中含有我們整個(gè)證書鏈的所有證書就好,證書合并的時(shí)候,正確的合并方法是把 mCA 合并到 sCA 中。當(dāng)有多個(gè) mCA 文件時(shí),mCA 從下級(jí)到上級(jí)(根證書為最上級(jí))依次合并到 sCA 中。

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

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

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