網上有不少關於OpenSSL命令行的用法,問題在於大部分文章只是零碎的使用一個命令行而已,沒有一個完整的證書頒發流程。有部分只是自簽名證書,被谷歌瀏覽器和火狐瀏覽器等絕大部分瀏覽器認爲是不可信任的證書。下面我給出一個完整的實例,讓谷歌瀏覽器和火狐瀏覽器都顯示綠標。
大部分數字證書的頒發業務操作發生在Linux系統上,再加上Windows頒發數字證書的過程中許多應用程序彈出對話框,一個批處理無法在無人爲干預的情況下迅速完成操作,本實例的所有命令行在CentOS 7 64位操作系統上運行。
第1步:獲得操作權限,檢查CA環境
證書的頒發操作需要root權限,首先進入root用戶:
sudo -i
檢查CA環境是否正常:
openssl -v
file /etc/pki/tls/openssl.cnf
如果無法顯示OpenSSL版本或者OpenSSL配置文件信息,那麼CA環境是損壞的,建議重新安裝OpenSSL。OpenSSL的安裝也比較簡單,運行:
yum install openssl -y
即可安裝好。
第2步:編輯CA服務器信息
頒發證書操作所在的服務器就是CA服務器,雖然操作員也許沒有意識到他把眼前下在操作的服務器當成了CA服務器來用。數字證書的頒發者、聯繫信息都在openssl.cnf中配置,下面進行編輯:
vim /etc/pki/tls/openssl.cnf
openssl.cnf格式也是Windows系統ini的文件格式。結構上分爲配置節、鍵和值。其中,subjectAltName表示此證書認證的網站域名。一個典型的寫法是:
subjectAltName=DNS:*.caoshiying.com
表示此網站的所有二級域名都可以通過此CA服務器頒發數字證書獲取綠標。一般情況下,建議一個數字證書唯一對應一個域名,因爲通配證書也容易被XSS利用。其它信息都在 CA_default
配置節下,其設置比如國家、省會、城市、郵箱等信息都可以在頒發證書的時候從用戶輸入或者命令行參數中得到。
最重要的配置是指定頒數字證書的時候要使用的數字證書的名稱,配置節是:
certificate=$dir/root-cert.pem
private_key=$dir/private/root-key.pem
下一步將創建一個名爲root-cert.pem
的根證書。
第3步:創建根證書
一個CA服務器可以存在多個根證書。如果根證書已經存在並且密鑰是已知的,則可以跳過這個步驟。如果有重新構建根證書的決心,可以運行以下命令:
cd /etc/pki/CA
rm -fr $deploydir/*
rm -f index.txt
rm -f serial
touch index.txt serial
echo 01 > serial
rm -f root*
rm -f private/*
生成一個根證書密鑰:
openssl genrsa -out private/root-key.pem 2048
在實際生產環境中建議把位數設置在4096或者更大的2的冪函數級別上。下面創建公鑰並註冊到Linux系統:
openssl req -new -x509 -key private/root-key.pem -out root-cert.pem -days 3650 -subj '/C=CN/ST=WH/L=HB/O=XueSongShu/OU=R&D/CN=caoshiying.com/[email protected]/'
cp /etc/pki/tls/certs/ca-bundle.crt{,.bak}
cat root-cert.pem >> /etc/pki/tls/certs/ca-bundle.crt
第4步:把根證書轉換爲Windows識別的格式
瀏覽器用戶絕大部分用戶喜歡Windows操作系統。所有把根證書公鑰轉換爲Windows格式是必須的。下面輸出CER和PFX格式的證書,運行:
openssl x509 -outform der -in root-cert.pem -out root-cert.cer
openssl pkcs12 -export -out root-cert.pfx -inkey private/root-key.pem -in root-cert.pem
導出PFX格式的數字證書的時候我輸入的密碼是123456。建議在生產環境下使用符合安符標準的複雜密碼。
把數字證書復到Windows系統以及把數字證書安裝到系統根證書存儲區的方法,如有不知道操作的朋友,請看我下一篇博客。下面看看效果:
第5步:頒發數字證書
大分部瀏覽器都已經能夠識別自簽名證書並標記它們爲不能信任。因此再頒發一次證書是必須進行的一個步驟。運行下面的命令行:
cd /etc/nginx/ssl
openssl genrsa -out caoshiying.key 2048
openssl req -new -key caoshiying.key -out caoshiying.csr -days 3650 -subj '/C=CN/ST=WH/L=HB/O=XueSongShu/OU=R&D/CN=www.caoshiying.com/[email protected]/'
openssl ca -in caoshiying.csr -out caoshiying.crt -days 3650
所有詢問項都輸入y
表示確認。成功截圖如下:
頒發出來的的證書不用複製到Windows系統,只需要讓Web網站服務器找得到它並確保密鑰安全不被他人竊取即可。
第6步:查看頒發的數字證書在Windows系統上的效果
首先查看數字證書本身的效果:
然後看看運用到網站上的效果: