環(huán)境說明
- 域名為萬網注冊域名
- 服務器Ubuntu 16.04
通過acme.sh方式獲取證書
- 獲取acme.sh
curl https://get.acme.sh | sh
acme.sh
- 如果acme.sh 命令未找到
source ~/.bashrc
# zsh 下
source ~/.zshrc
-
申請簽發(fā) SSL 證書
acme.sh強大之處在于,可以自動配置DNS,不用去域名后臺操作解析記錄了。下面以萬網域名的操作為例# 替換成從阿里云后臺獲取的密鑰 export Ali_Key="xxx" export Ali_Secret="xxxxxxxx" # 換成自己的域名 acme.sh --issue --dns dns_ali -d xxx.com -d *.xxx.com獲取Ali_Key 和 Ali_Secret的方法
其他地方注冊的請參考這里
如果在zsh環(huán)境下報 zsh: no matches found: *.xxx.com 的錯誤vim ~/.zshrc # 在文件上追加 setopt no_nomatch source ~/.zshrc證書申請成功之后會出現如下的信息
[Mon Apr 30 15:35:14 CST 2018] Your cert is in /root/.acme.sh/xxx.com/xxx.com.cer [Mon Apr 30 15:35:14 CST 2018] Your cert key is in /root/.acme.sh/xxx.com/xxx.com.key [Mon Apr 30 15:35:14 CST 2018] The intermediate CA cert is in /root/.acme.sh/xxx.com/ca.cer [Mon Apr 30 15:35:14 CST 2018] And the full chain certs is there: /root/.acme.sh/xxx.com/fullchain.cer申請的證書會放到 ~/.acme.sh/ 目錄里面,所有的 acme.sh 配置都記錄在 ~/.acme.sh/ 目錄里面,acme.sh 有自動的配置讀取,并按域名劃分,下次你再次執(zhí)行的時候,它知道你之前是用的那個目錄,只需要告訴它域名就好了。
-
安裝證書
acme.sh --installcert -d xxx.com \ --keypath /data/nginx/ssl/xxx.com.key \ --fullchainpath /data/nginx/ssl/xxx.com.key.pem \ --reloadcmd "/data/nginx/sbin/nginx -s reload" # /data/nginx/ssl/ 是證書安裝目錄 # reloadcmd 是nginx 的reload 命令這個比較重要,因為它會讓 acme.sh 記住重啟 Nginx 的命令,以后自動更新證書的動作需要重啟 Nginx,然后你會看到結果
[Mon Apr 30 16:19:32 CST 2018] Installing key to:/data/nginx/ssl/xxx.com.key [Mon Apr 30 16:19:32 CST 2018] Installing full chain to:/data/nginx/ssl/xxx.com.key.pem [Mon Apr 30 16:19:32 CST 2018] Run reload cmd: /data/nginx/sbin/nginx -s reload [Mon Apr 30 16:19:32 CST 2018] Reload success -
配置nginx
生成 dhparam.pem 文件openssl dhparam -out /data/nginx/ssl/dhparam.pem 2048修改 Nginx 啟用 SSL
http { # 新增 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; # 兼容其他老瀏覽器的 ssl_ciphers 設置請訪問 https://wiki.mozilla.org/Security/Server_Side_TLS server { listen 80 default_server; # 新增 listen 443 ssl; ssl_certificate /data/nginx/ssl/www.xxx.com.key.pem; ssl_certificate_key /data/nginx/ssl/www.xxx.com.key; # ssl_dhparam ssl_dhparam /data/nginx/ssl/dhparam.pem; # 其他省略 } }檢查 Nginx 配置是否正確后重啟
/data/nginx/sbin/nginx -t # 檢查無誤后,重啟nginx /data/nginx/sbin/nginx -s reload -
驗證 SSL
訪問 ssllabs.com 輸入你的域名,檢查 SSL 的配置是否都正常:
https://ssllabs.com/ssltest/analyze.html?d=xxx.com
確保驗證結果有 A 以上,否則根據提示調整問題
一些注意事項
ssl_dhparam未配置,將導致 ssllabs.com 的評分降到 B,并給This server supports weak Diffie-Hellman (DH) key exchange parameters. Grade capped to B.的警告。
ssl_prefer_server_ciphers on也是一個必要的配置,否則會 A+ 變成 A-;*
如果你需要兼容老系統(tǒng)或老瀏覽器的話,你需要配置ssl_ciphers,詳見 Mozilla Server_Side_TLS 的介紹,Nginx 里面ssl_ciphers默認值是HIGH:!aNULL:!MD5;ref參考
https://github.com/Neilpang/acme.sh
https://my.oschina.net/kimver/blog/1634575
https://ruby-china.org/topics/31983
