近期的工作中遇到了數據傳輸加密的需求,就是在數據傳輸安全層面都要求使用https協議,因此為Web站點安裝SSL證書就成了必須,以下就過程記錄。
1.需求及選型
需求有兩條:
我們很多項目都是在內部區域網運行,沒有公網IP,更沒有域名,因此必須能支持內網IP位址。
相當一部分SSL證書需要付費購買,雖然一般不是很貴,成本也需要稍稍考慮一下。免費的SSL證書也有不少地方可以申請,但是能支持內網IP位址的好像沒有。
基於這兩條考慮,考慮使用開源組件OpenSSL創建自籤名SSL證書。自己發給自己的證書,可不就想怎麼改就怎麼改。
2.OpenSSL創建自籤名證書過程
2.1安裝或更新OpenSSL組件
CentOS作業系統是自帶OpenSSL組件,可以選擇直接使用或者更新後使用。
查看OpenSSL版本
獲取最新版本OpenSSL
解壓後進行編譯安裝配置,升級到最新版本
tar -zxvf openssl-1.1.1k.tar.gz cd openssl-1.1.1k ./config make && make installmv /usr/bin/openssl /usr/bin/openssl.bakln -sf /usr/local/openssl/bin/openssl /usr/bin/opensslecho "/usr/local/openssl/lib" >> /etc/ld.so.confldconfig -v升級完成後可以查看OpenSSL提供的命令。
2.2 創建證書配置文件
創建一個後綴為cnf的配置文件,名稱隨便起,但是要記得,後面會用到。
[req]distinguished_name = req_distinguished_name encrypt_key = noreq_extensions = req_ext
[req_distinguished_name]countryName = CNcountryName_default = USstateOrProvinceName = JiangSustateOrProvinceName_default = JiangSulocalityName = NanJinglocalityName_default = NanJingorganizationalUnitName = WorkorganizationalUnitName_default = WorkcommonName = www.默認域名或IP.comcommonName_max = 64
[req_ext]basicConstraints = CA:FALSEkeyUsage = nonRepudiation, digitalSignature, keyEnciphermentsubjectAltName = @alt_names
[alt_names]DNS.1 = www.域名1.comDNS.2 = *.域名2.comDNS.3 = 域名3IP.1 = 192.168.199.86IP.2 = 192.168.199.1IP.3 = 127.0.0.1其中req_distinguished_name項內是證書的基本信息,alt_names是可以使用證書的域名和IP位址,可以填寫多個。
注意:req_distinguished_name、req_ext、alt_names這幾個要前後對應
2.3 創建自籤名SSL證書
總體過程是先創建一個私鑰,然後通過私鑰創建一系列證書。
下面是在CentOS中的執行示例
#輸出私鑰ca.key,使用rsa算法、2048位openssl genrsa -out ca.key 2048 #根據私鑰ca.key生成ca.csr,使用配置文件san.cnf,擴展項為req_extopenssl req -new -key ca.key -out ca.csr -config san.cnf -extensions req_ext #籤發證書ca.crtopenssl x509 -req -in ca.csr -signkey ca.key -out ca.crt -extfile san.cnf -extensions req_ext#輸出私鑰client.key,使用rsa算法、2048位openssl genrsa -out client.key 2048#根據私鑰client.key生成client.csr,使用配置文件san.cnf,擴展項為req_extopenssl req -new -key client.key -out client.csr -config san.cnf -extensions req_ext#籤發證書client.crtopenssl x509 -req -sha256 -extfile req_ext -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt通過命令行可以查看密鑰的內容
openssl rsa -in ca.key -text -noout最後生成的是這麼一堆文件
後綴為crt的就是我們需要的證書文件。
3.安裝SSL證書
3.1 Nginx站點安裝SSL證書
找到站點所在的Niginx伺服器,打開配置文件nginx.conf
server {listen 8008 ssl; server_name
ssl on;
ssl_certificate /usr/local/nginx/ssl/ssl.pem; ssl_certificate_key /usr/local/nginx/ssl/ssl.key;
ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;
location / {proxy_pass http://需要訪問的域名:8080/;}}之後重啟Niginx即可生效。
如果你的伺服器安裝了寶塔bt運維工具,為站點安裝SSL證書的過程就更方便了,完全的圖形化操作過程。
打開站點配置>SSL>其他證書,分別將私鑰ca.key與證書ca.crt中內容拷貝到文本框中,保存即可。
3.2 Windows作業系統安裝證書
雙擊證書ca.crt,彈出提示框,開始證書安裝。
選擇證書安裝,進入證書導入嚮導界面,選擇存儲位置為「本地計算機」。
繼續下一步,將證書安裝至「受信任的根證書頒發機構」。
4.後續處理
SSL證書創建完、安裝完並不是就結束了,開發人員的工作還沒結束呢。
目前我們採用的是前後端分離的開發方式,SSL證書一般加在前端站點上。但是使用https的站點會禁用http請求,這就要求所有的請求都必須是https協議的,也就是前端的調用、後端的接口提供都需要在代碼中改成https形式。