1、生成根證書密鑰
#] openssl genrsa -des3 -out ca.key 2048
2、自簽證書
#] openssl req -new -x509 -days 7305 -key ca.key -out ca.crt
參數說明:
req: 生成證書籤署請求
-news: 新請求
-key /path/to/keyfile: 指定私鑰文件
-out /path/to/somefile:
-x509: 生成自簽署證書
-days n: 有效天數
3、準備必要文件:
#] touch /etc/pki/CA/{index.txt,serial}
#] echo 01 > /etc/pki/CA/serial
4、製作網站證書並用此CA簽名,假設網站域名爲web1
生成證書密鑰:
#] openssl genrsa -des3 -out web1.pem 1024
製作解密後的web1證書私鑰:
#] openssl rsa -in web1.pem -out web1.key
生成簽名請求,在common name中填入網站域名,如web1即可生成改站點的證書,同時也可以使用泛域名如*.web1來生成所有二級域名可用的網站證書:
#] openssl req -new -key web1.pem -out web1.csr
用CA進行簽名:
#] openssl ca -policy policy_anything -days 365 -cert ca.crt -keyfile ca.key -in web1.csr -out web1.crt
其中,policy參數允許簽名的CA和網站證書可以有不同的國家、地名等信息,days參數則是簽名時限。
最後,把ca.crt的內容粘貼到web1.crt後面。這個比較重要!因爲不這樣做,可能會有某些瀏覽器不支持。
5、配置nginx支持https
在nginx.conf配置文件server配置中增加一下配置:
listen 443;
ssl on;
ssl_certificate /path/to/web1.crt;
ssl_certificate_key /path/to/web1.key;
其中的路徑是剛剛生成的網站證書的路徑。
然後使用一下命令檢測配置和重新加載nginx:
檢測配置:
nginx -t
重新加載:
nginx -s reload
6、優化nginx配置
在http{}中加入:
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
據官方文檔所述,cache中的1m可以存放4000個session。
在配置https的虛擬主機server{}中加入:
keepalive_timeout 70;
7、客戶端瀏覽器導入根證書和網站證書
打開證書管理工具:運行certmgr.msc命令(也可以在瀏覽器中導入證書)
將根證書ca.crt導入至受信任的根證書頒發機構,網站證書web1.crt導入到個人正式中。
然後在瀏覽器中輸入https://domain,地址欄左側會出現一把綠色的鎖,如下圖: