爲添加了自定義域名的GitHub Pages添加SSL,啓用強制HTTPS(小綠鎖)

直奔主題

爲何要使用https協議?

  1. 提升網站訪問安全性,網絡鏈接都是加密的 (PS:雖然SSL並非無懈可擊的,可是咱們應該儘量提升竊聽成本)。css

  2. 目前愈來愈多的瀏覽器會判斷當前站點支不支持https協議,提升用戶信任度,體驗好.html

    例如:據外媒報道,從2017年1月份正式發佈的Chrome 56開始,Google將把某些包含敏感內容的HTTP頁面標記爲「不安全」,好比含有密碼或支付表單信息。Google最終目標是將全部打破了https鏈接的HTTP頁面,用特定的紅色圖標給標記出來… 此舉旨在喚起用戶有關HTTP鏈接不安全、容易受到中間人攻擊等危險的意識。經過HTTP鏈接發送的數據(好比密碼和支付細節),會被通網絡下別有用心的人輕易攔截。nginx

  3. Mozilla也在作着一樣的事情——其中就有經過提供免費的TSL證書,以便其爲網站服務部署https鏈接的Let's Encrypt項目。根據Chrome的遙測數據,在該瀏覽器天天加載的網頁中,有近一半是經過https鏈接的。git

  4. 福利:使用了https以後,若是網站的訪客是從其餘已經使用了https的網站上跳轉過來,你就能在Google Analytics中獲取更完整的來源信息。(說到這,不得不吐槽一下」牆」,它致使 Google Analytics的信息延遲長達一天以上,最後我不得再也不將 Baidu Analytics 歸入個人選擇。)github

  5. 使用https以後,谷歌、百度等搜索排名權值(PR等)也會有相對提高。瀏覽器

  6. And 我的緣由,做爲一個有個性並略有強迫症的耿直Boy,終於在前一陣子給本身的博客弄了我的域名zhouie.cn(阿里雲),怎麼能夠沒有一把小小的綠鎖頭?!緩存

默認狀況下使用GitHub Pages的給定域名則支持http和https兩種協議,可是若是使用自定義域名的話,則只能經過http://訪問,也就是說咱們在Github上搭建 Hexo 或Jekyll 主題博客後,經過CNAME綁定我的域名後,咱們只能經過http://域名來訪問。若是訪問https://XXX.github.io/(即原來的GitHub Pages域名)將會被重定向到咱們的自定義域名。但若直接訪問https://咱們的自定義域名,瀏覽器會報SSL_DOMAIN_NOT_MATCHED警告。安全

附:在Github上搭建 Hexo 或Jekyll 主題博客,這個網上教程不少,提供一篇我以前有寫過的一篇教程Jekyll 搭建我的博客服務器

那麼怎麼給本身的域名加上https呢?這個時候就須要使用第三方網站的證書了。而GitHub Pages並不支持上傳SSL證書。markdown

我在Google、Bbaidu上找相關解決辦法時,又看到這樣一個帖子:GitHub Pages 自定義域名啓用 SSL,各位有什麼建議?

從網上提供的信息來看,目前方案主要有兩種:

  • 本身購買證書,部署到一臺機器,機器部署nginxstunnel等代理軟件,反向代理到GitHub pages站點,域名指向代理機器IP(收費的SSL服務確定是比免費的更加周到,通常收費的SSL都會提供端到端的加密,可是價格不菲,不推薦);

  • 使用CloudFlare提供方案1相似的設置(推薦)


借用CloudFlare 給本身的域名加個 s

CloudFlare 是一家CDN提供商,它提供了免費的https服務(但不是應用SSL證書)。實現模式就是,用戶到CDN服務器的鏈接爲https,而CDN服務器到GithubPage服務器的鏈接爲http,就是在CDN服務器那裏加上反向代理。

在網上還找到這樣一種解釋
Cloudflare 提供一種被他們稱之爲Universal SSL的服務,可讓任意 HTTP站點支持 HTTPS。它的原理是當訪客使用 HTTPS訪問站點的時候,從訪客到 Cloudflare 這段是加密的,而後從 Cloudflare 到站點這段是明文的。雖然不是全程加密,可是也能很大程度上解決中間人,若是從 Cloudflare 到站點的信道相對可靠的話

  1. 註冊並登陸CloudFlare,並將本身域名下的name server修改成CloudFlare的name server
  2. 在CloudFlare的DNS設置域名匹配到本身的GithubPage(啓用動態DNS加速)。
  3. 在CloudFlare的Crypto設置SSL爲Flexible(等待必定時間實現創建鏈接後,就能夠經過https來訪問本身的 GithubPage )。
  4. 在CloudFlare的Page Rules中設置路由規則。通常狀況下,利用Always use https設置兩條規則,規則連接分別爲http://域名/*http://域名/(開啓https強制跳轉)。

還有其餘的一些,例如Cloudflare還提供免費的CDN緩存技術,讓瀏覽者有更好的體驗~~

詳細步驟

  • 建立CloudFlare賬戶,並添加網站

    首先你已經有本身的自定義域名的GitHub Pages ,個人 GitHub Pages CNAME文件寫的是 zhouie.cn

    明確一下咱們的實現目標: 當訪客輸入zhouie.cn 強制跳轉使用https,訪問wwww.zhouie.cn 也會跳轉到https://www.zhouie.cn

    若是你尚未Cloudflare帳號,點擊註冊

  • 登錄後,點擊這裏 增長你的域名,以下圖,輸入你的域名,例如 zhouie.cn 並點擊Begin Scan

    注意不要寫WWW前綴,大約60秒便可完成域名解析掃描。完成後點擊Continue Setup 繼續下一步

  • 你看到DNS記錄(包括子域)列表以後,按照下圖提示設置後,其中cname是爲了重定向www備的,點擊Continue下一步

  • 選擇免費計劃,而後下一步~

    到你域名控制面板修改cloudflare給出的域名服務器,我這裏以阿里雲爲例

  • 域名管理臺點擊管理

    注:雖然官方說明,域名服務器修改最長鬚要72小時生效,但我用域名作了本身測試,大約只須要 5~10 分鐘,看到 Status: Active 便可

  • 設置SSL
    點擊 crypto菜單 , 而後設置Flexible SSL ,以下圖

  • 添加www重定向到https://yicodes.com

  • 添加自動重定向到 SSL頁面

  • 添加SSL的教程就此完成,通常須要5~30分鐘生效!!!

小綠鎖出現了,哈哈

小綠鎖出現了,哈哈


補充[轉載]

爲何Github Pages不支持爲自定義域名添加SSL證書呢?

當咱們訪問自定義域名,DNS指向的地址(Github PagesIP)會在咱們的倉庫中尋找cname文件,判斷目標文件和請求來源地址的域名一致後,Github Pages會將errorlife.github.io的內容返回給用戶。

  • Ok,這是一個比較完整的過程,可是在解析的途中,看上面兩張圖(tracert一下這個」裸奔」站好了 :P),你會發現請求的地址是「美國Fastly公司CDN網絡節點」,很明顯這是Github的CDN,並且它只支持80端口,不支持443端口,免費的CDN通常不支持,而https默認就是使用443端口。

  • 因此咱們就知道Github Pages在解析域名和原生地址所分配的是不一樣的CDN,前者是不支持https的,然後者偏偏相反。

思考咱們犧牲了什麼

天下沒有免費的午飯,坐享其成始終都是泡沫。因此在這個過程當中咱們究竟犧牲了什麼?

  1. 咱們必須修改域名的DNS服務器爲Cloudflare提供的地址才能使用這項服務;
  2. 沒法進行coding+github雙線部署,除非你使用Cloudflare的收費服務,或者反向代理,更多思路詳見v2ex提問的一個帖子

檢查是否引用外部資源

這個問題在我這兒並無出現過,但是從網上教程來看,由於以往(一兩年前)引用的某些外部資源仍是http的,會出現一些問題,好比:

生效後我發現個人網站是不太安全的狀態,並且當我點擊加載腳本以後,從不太安全的狀態變成了不安全的狀態。

v友的解決辦法:

按下F12,尷尬的事情發生了,原來是配置文件和palceholder在做怪,因爲多說的頭像用的仍是http,巧的是,沒多久,多說就下線關門了。

這就要求咱們對https協議理解通透,以後google了一下,發現https並不支持這種第三方引入資源…


參考資料






【附:一文一圖】

相關文章
相關標籤/搜索