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-----