为添加了自定义域名的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并不支持这种第三方引入资源…


参考资料






【附:一文一图】

相关文章
相关标签/搜索