這里,不探究證書原理。我們要完成的任務是,自己充當CA,然后簽出證書供服務器使用。
本次教程是在windows實現,實驗之前,確認自己的電腦中有openssl程序。如果沒有,博主幫你准備了一個:http://download.okcoder.cn/openssl_create.zip
第一步:生成CA證書
1、創建私鑰
openssl genrsa -out ca/ca-key.pem 1024
2、創建證書請求
openssl req -new -out ca/ca-req.csr -key ca/ca-key.pem
3、自簽署證書,有效期10年
openssl x509 -req -in ca/ca-req.csr -out ca/ca-cert.pem -signkey ca/ca-key.pem -days 3650
4、將證書導出成瀏覽器支持的.p12格式 (這一步不需要,可以省略)
openssl pkcs12 -export -clcerts -in ca/ca-cert.pem -inkey ca/ca-key.pem -out ca/ca.p12
創建之后,將這個根證書導入瀏覽器中(受信任的根證書頒發機構):
IE:雙擊第4步生成的p12證書文件
Firefox:選項->隱私與安全 ->證書->查看證書->將ca-cert.pem導入“證書頒發機構”
Chrome:“菜單”設置->左上角"設置"->高級->隱私設置和安全性->證書管理->受信任的根證書頒發機構->導入ca-cert.pem證書文件
第二步:生成Server證書
1、創建私鑰
openssl genrsa -out server/server-key.pem 1024
2、創建證書請求
openssl req -new -out server/server-req.csr -key server/server-key.pem
(這一步,Common Name要填寫自己的域名)
3、用自己的CA證書,簽署Server證書
openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 3650
4、將證書導出成瀏覽器支持的.p12格式 (這一步不需要,可以省略)
openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12
創建Server證書之后,與Ca證書合成完整的證書鏈:
cat server-cert.pem ca-cert.pem > full.pem
第三步:將Server證書布署到服務器上
server {
listen 80;
listen 443 ssl;
server_name 域名; #這里的域名要和Server證書域名對應
index index.html index.htm index.php;
root 站點根目錄;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_certificate /path/to/full.pem;
ssl_certificate_key /path/to/server-key.pem;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
}
到這里,自簽證書可以使用了。
實驗結果:IE和Firefox都可以正常訪問,但是Chrome卻一直無法識別自簽證書(NET::ERR_CERT_AUTHORITY_INVALID),如果有實驗成功的小伙伴歡迎留言。
參考資料:
https://blog.csdn.net/xiaxiaorui2003/article/details/41312381
