啓用 https 的一點記錄

近兩年愈來愈多的網站開始使用 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 的一點記錄

相關文章
相關標籤/搜索