Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

记录blog https升级 #17

Open
wolfdu opened this issue Dec 20, 2017 · 1 comment
Open

记录blog https升级 #17

wolfdu opened this issue Dec 20, 2017 · 1 comment

Comments

@wolfdu
Copy link
Owner

wolfdu commented Dec 20, 2017

https://wolfdu.fun/post?postId=5a3a8ee225322c62a62e7b10


趁热打铁来一发,记录blog全站升级https┑( ̄Д  ̄)┍

本次升级的目标就是(⊙o⊙)…让blog变绿(;′⌒′)

本次升级的内容是启用HTTPS并将HTTP/1.1升级为HTTP/2,HTTPS和HTTP/2才更配嘛~~

第一步了解什么是HTTPS,什么是HTTP/2,此处省略数万字。。。
看了几天虽然没看明白,蛋是让我觉得升级肯定很麻烦,结果呢!!!
果然了解了一丢丢相关知识后,好像对升级过程并没有太大帮助( ・᷄ὢ・᷅ ),因为整个升级过程并没有想象的那么复杂。

升级HTTPS有什么呢?

  1. 站点用户安全性更高,暂时来说就我一个用户,不过还是可以降低被劫持的风险
  2. HTTPS对SEO有一定的好处,(⊙o⊙)…忽略不计

┑( ̄Д  ̄)┍好吧,我承认升到HTTPS就是为了拥有原谅色的光环,看起来更舒服(不过https现在也是标配啦)。

废话说到这干正事吧。

首先要有个证书

我们要知道升级到https我们要有一个证书。
证书会分为以下三种级别:

  • 域名认证(Domain Validation):最低级别认证,可以确认申请人拥有这个域名。对于这种证书,浏览器会在地址栏显示一把锁。
  • 公司认证(Company Validation):确认域名所有人是哪一家公司,证书里面会包含公司信息。
  • 扩展认证(Extended Validation):最高级别的认证,浏览器地址栏会显示公司名。

例如gayhub这种交友网站就是最高级别认证,地址栏有绿色光芒的公司信息,而本blog就只有一把锁了。第二种公司认证,貌似没有发现特别的,没看粗来。

同时呢证书有三种覆盖范围:

  • 单域名证书:只能用于单一域名,foo.com的证书不能用于xxx.foo.com
  • 通配符证书:可以用于某个域名及其所有一级子域名,比如*.foo.com的证书可以用于foo.com,也可以用于xxx.foo.com
  • 多域名证书:可以用于多个域名,比如foo.com和bar.com

至于这些证书呢,都是要买的,功能越强大就越贵。不过也有免费的,大多为基础版,同时还会有过期时限,需要定时去续签。

当然本次升级使用的是免费的,由 Let’s Encrypt提供的免费解决方案,这个方案就为了让玩家免去复杂的手动配置https,让你无痛升级。

那么老板来个证书吧(´;ω;´)

  1. 先登录certbot选我们web服务的介入软件和服务器,我使用的软件和服务器为software:Nginxsystem: Ubuntu 16.04

  2. 接下来就会跳转到安装教程,先安装Cerbot

$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx 
  1. 检测Nginx配置文件
$ sudo certbot --nginx

该命令检测Nginx配置列出当前Nginx中部署的站点,你只要按照提示选择你要启用https的站点,然后会让你选择是否让http请求重定向到https,然后就没有然后了。

其实这里我们可以看看我们要启用https站点的Nginx配置文件,我们可以在server配置发现多了这些玩意:

listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/wolfdu.fun/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/wolfdu.fun/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

# Redirect non-https traffic to https
if ($scheme != "https") {
  return 301 https://$host$request_uri;
} # managed by Certbot

这里的fullchain.pem就是证书内容了,privkey.pem是证书私钥。
此时,我们只需要重新加载一下Nginx就好了

$ sudo nginx -s reload

处理证书过期

免费证书的有效时限是90天,如果过期了我们需要更新一下我们的证书

$ sudo certbot renew

但是每次都要手动就太麻烦了,这里设置一下自动化更新脚本使用crontab来实现自动化。

$ sudo crontab -e

然后在定时任务中加入如下内容,让服务器每月都强制更新下证书,并重启Nginx

0 0 1 * * /usr/bin/certbot renew --force-renewal
5 0 1 * * /usr/sbin/service nginx restart

HTTP/1.1 to HTTP/2

还记得我们在Nginx配置server中加入的那一段ssl相关配置吗?

listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/wolfdu.fun/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/wolfdu.fun/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

在第一行后面加上http2就好啦。。。(;´༎ຶД༎ຶ´)就是这嘛简单。


这样就大功告成了。
打开blog发现浏览器头绿了一下马上就灰了。。。=͟͟͞͞( •̀д•́)这是那样。
点开浏览器头部的信息详情会发现,提示说攻击者可以通过该网站图片欺骗我,应该是我布在七牛云上的图床不是https的原因,那么我们只需要将七牛云升级为https就可以啦。

那么问题来了,我们怎么给不是部署在自己服务器上的域名生成证书呢?

方案一:通过申请七牛云的免费证书。
但是点开一看,要备案很多信息,而且时间而且要等很久,所以pass

方案二:直接通过域名生成证书。
果然还是老湿鸡见多识广给我推荐SSL For Free可以方便快捷的通过域名生成ssl证书。

那么到这里基本整个升级就完成了。以后也是自带绿色光芒的blog了٩(๑ᵒ̴̶͈᷄ᗨᵒ̴̶͈᷅)و

参考文章:
如何免费的让网站启用HTTPS
HTTPS 升级指南

若文中有知识整理错误或遗漏的地方请务必指出,非常感谢。如果对你有一丢丢帮助或引起你的思考,可以点赞鼓励一下作者=^_^=

@xzhuz
Copy link

xzhuz commented May 7, 2018

注意到了原谅色🤭

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants