近兩年愈來愈多的網站開始使用 https,https 是一個基於 http 協議開發,可是使用了 TLS/SSL 加密了傳輸數據,因此,簡單點說 https 是 http 協議的「安全版」。最近博客從阿里雲搬遷到騰訊雲,也修改了幾個程序上的 bug,順便也啓用了 https,記錄一下。html
由於 https 採用 ssl 加密,因此部署 https時須要申請證書,證書的做用就是對瀏覽器和Web服務器雙方的身份驗證,推薦文章:圖解HTTPS。
1. 申請
這裏我使用了Let's Encrypt免費證書。雖然 Let's Encrypt 只有3個月的有效期,可是由於有certbot自動部署工具,自動更新起來也很是簡單。進入 certbot 主頁,能夠看到下圖所示。
node
選擇本身的web服務器類型和操做系統,好比我這裏是 nginx+centos6.5,選擇完畢以後會自動給出安裝命令[如下命令以此爲例]。
RedHat系
Debian系
nginx
安裝完以後執行./certbot-auto certonly
開始申請證書。申請證書有兩種驗證方式,一種是standalone,這種驗證方式雖然也能夠部署後,可是之後更新證書的時候須要重啓 web 服務器,因此我採用了第二種Webroot,就是在網站根目錄下生成一個文件,經過訪問該文件來驗證,不須要重啓 web 服務器。git
若是選擇 Webroot 模式,而且web服務器開啓請求重定向的話,須要把 certbot 生成的文件的路徑開放,讓請求能夠命中。github
選擇驗證模式以後,填寫網站根目錄以及域名,便可開始生成證書文件。以上操做也能夠簡化爲一條命令./certbot-auto certonly --Webroot -d example.com -d www.example.com
,多個域名使用-d
追加。
執行完畢若是產生相似如下代碼,即成功生成。web
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/your.domain.com/fullchain.pem. Your cert will expire on 20XX-09-23. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
2. 部署
接下來修改nginx配置,添加 443 端口的監聽。shell
listen 443 ssl; server_name hersface.com www.hersface.com; ssl on; set $node_port 8360; ssl_certificate /etc/letsencrypt/live/hersface.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/hersface.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/hersface.com/chain.pem; ssl_session_timeout 5m; ssl_protocols TLSv1; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on;
重啓nginx服務,訪問網站,https 已經能夠打開了。centos
3.證書更新
certbot 已經有更新命令,咱們只須要部署定時任務就行30 2 15 * * /root/ssl/certbot-auto renew >> /var/log/le-renew.log
每個月15號2:30執行更新,並保存任務日誌。事實上90天才過時,徹底能夠在80天的時候自動更新,並且 Let’s Encrypt 也限制短時間內不能頻繁更新,可是不肯定限制的時間是多少,由於申請完證書30天以後我使用更新命令的時候提示不須要更新。瀏覽器
4.其餘免費證書
騰訊雲免費證書
沃通免費證書
阿里雲免費證書安全
以前博客的靜態資源是託管在七牛的,使用的七牛免費域名。可是隻能使用 http 的請求。由於在開啓 https 的頁面上若是存在 http 資源的話,瀏覽器會提示
強迫症表示不能忍。可是七牛若是想使用 https 的話,要麼使用 cdn,要麼自定義域名。cdn 是按流量計費的,感受不必,因此使用自定義域名了(還得充值10塊錢)
若是使用https域名的話須要上傳證書和私鑰的內容,這裏的證書推薦使用騰訊雲的免費證書,3年有效期,不用頻繁續簽。上傳完配置域名canme解析,若是解析成功,被七牛檢測到,就能夠開始使用了該域名了。
因爲博客一直使用的是多說的評論框,可是多說對 https 處理的很是很差。雖然 js 支持 https,可是用戶的第三方頭像和評論的表情圖片都是引用的 http 地址,百度搜了一下解決方案基本上都是替換 js 裏的連接爲本地地址,並把原地址當參數傳入,由程序處理,或者配置反向代理,獲取原圖內容,並輸出。
參考文章:
讓多說評論框完美支持HTTPS
因而我配置了一下反代。
location ~ "^/proxy/(.*)$" { resolver 8.8.8.8; proxy_pass http://$1; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; expires 7d; }
可是以後發現效果並很差,以爲加載速度特別慢,不知道由於是配置有問題,仍是瀏覽器併發限制致使的。
後來在 github 搜出來一個神器:https://github.com/rainwsy/duoshuo-https,做者把第三方 http 地址改成七牛CDN處理。感謝!!!
至此,部署完畢。後面還須要再研究一下http2。
博客連接:啓用 https 的一點記錄