ssl證書的生成與簽名
一些概念
KEY : 私鑰檔案,決定ssl安全的基礎
CSR : 證書請求檔案,包含公鑰和證書資訊
CA : 中級證書頒發機構,一般是可信的第三方,CA證書會驗證公鑰是否被認證
root CA:通過它的私鑰對中級機構提交的CSR進行了簽名
申請ssl證書需要用到openssl,linux系統中預設會安裝,手動安裝openssl:
yum install -y openssl openssl-devel
一.生成私鑰
私鑰是SSL安全性的基礎,使用RSA演算法生成,只有證書申請者持有,即使CA也沒有對私鑰的訪問許可權,應妥善保管。私鑰長度決定其安全性,2009年768位RSA已被破解,1024位RSA短期內是安全的,但隨著計算機越來越快,已不足以抵禦攻擊,為了安全起見應儘量使用2048位RSA,生成2048位私鑰:
openssl genrsa -out 52os.net.key 2048
如果對安全性要求較高,可以用密碼加密金鑰檔案,每次讀取金鑰都需輸入密碼:
openssl genrsa -des3 -out 52os.net.key 2048
二.生成CSR
證書籤名請求檔案(CSR)中包含了公鑰和證書的詳細資訊,將CSR傳送給CA認證後就會得到數字證書或證書鏈,生成CSR檔案:
openssl req -new -sha256 -key 52os.net.key -out 52os.net.csr
按照提示輸入:國家、省份、城市、組織名、部門、公共名稱、郵件地址等,最後的extra資訊不要填寫,個人使用者也可以使用預設或留空,只需注意‘Common Name’是要使用ssl證書的域名,根據實際情況,可以寫單域名,多個域名,或使用‘*’通配域名
驗證CSR檔案資訊:
openssl req -noout -text -in 52os.net.csr
確認資訊正確就可以提交給ca進行認證,CA會根據你的CSR檔案進行簽名,之後頒發數字證書,該數字證書和私鑰就可以部署到伺服器了;通常ca認證需付費,普通ssl證書不貴,也有一些提供免費的證書的ca,如startssl、Let's Encrypt等
三.自簽名
在某些情況下,如內網https的應用,不需要付費使用第三方簽名,此時就可以使用自簽名證書。自簽名分兩種:
- 使用自己的私鑰簽發自己的csr生成證書,也可以直接生成私鑰和證書
- 生成ca,使用ca簽發
生成ca的好處是:客戶只要手動信任該ca一次,即可信任該ca簽發的所有證書,不需要為每個證書新增信任
3.1 使用自簽名
使用上面生成的私鑰簽發證書:
openssl x509 -req -days 365 -in 52os.net.csr -extensions v3_ca -signkey 52os.net.key -out 52os.net365.crt
或者直接生成私鑰和證書:
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout 52os.net.key -out 52os.net.crt
可以使用chrome瀏覽器匯出證書並安裝到windows信任證書中,安裝後瀏覽器位址列的https就會變成綠色。匯出方法:訪問https網站,點選位址列上有紅色叉的鎖型圖示,點選詳細資訊,點選檢視證書,在彈出的證書視窗中點選詳細資訊選項卡,點選複製到檔案,之後按證書匯出嚮導的提示即可匯出
3.2 使用ca簽名
生成 CA:
openssl genrsa -out CA.key 2048
openssl req -new -x509 -key CA.key -out CA.cer -days 36500 -subj /CN='52os CA'
使用ca簽發證書:
openssl x509 -req -in 52os.net.csr -extensions v3_usr -CA CA.cer -CAkey CA.key -CAcreateserial -out 52os.net.crt
為了更好的相容瀏覽器,還需:
cat CA.cer >> 52os.net.crt
客戶端手動信任CA.cer即可,windows下可以雙擊安裝