我是如何给我的个人网站升级https的

2016就要过去了,回来的时候在公交上直接睡着了,差点坐过站,2016有很多无奈,希望2017一切尽如人意,做自己喜欢的事情,再苦再累也愿意!有点跑题,还是说说昨天做的事情吧,烂笔头一直在路上。

随着2016年的结束,HTTPS的时代就要来了,苹果在今年的全球开发者大会上通告自2017-01-01开始,上架AppStore的应用必须使用HTTPS,Google也做出自2017开始,chrome将对未使用HTTPS的网站标注为不安全。所以,还是来做做HTTPS吧。

选择

全球有很多CA机构提供证书服务,我们的选择也很多,但是对于我而言,选择还是有限的,因为最好能节约点吧,也没有必要在这方便花费太多在个人博客上。于是我首先选择的StartCom,其提供的免费一年的证书正好适合我的需求。

StartCom

需要翻墙

虽然网上有很多关于申请StartCom证书流程的说明,但是似乎其网站做过改版,我觉得有必要再重新说一说。

注册
  1. 填写邮箱注册

  2. 注册后续步骤
    在此步骤中,主要是安装用于登录的证书。

    如何安装登录证书?Mac上直接双击即可,Windows自己试试呗!
    你也可以直接“click ‘here’”进行登录,此时startssl会将一次性密码发到你的邮箱。

申请证书
域名校验(Domain Validations)

也就是校验这个域名到底是不是你的

  1. 选择Validations Wizard
  2. Domain Validations
  3. 选择你的域名邮箱,阿里云的是 postmaster@yourdomain.com
  4. 验证结束
生成证书
  1. 选择Certificates Wizard,点击DV SSL Certificate

    进入如下页面:
  2. 在服务器上生成csr文件,IE用户请略过2、3步
    登入服务器,执行:

    1
    openssl req -newkey rsa:2048 -keyout your_file_name.key -out your_file_name.csr

  3. 填入csr

  4. 下载证书,点击’here‘

腾讯云

注册登录腾讯云后,进入控制台,选择云产品 -> SSL证书管理,如图:

点击申请证书,如图:

可以看到该证书有TrustAsia(亚洲诚信)机构颁发,唯一不足的是,该证书只支持单个非顶级域名,比如:www.dev-heaven.com,pyenv.dev-heaven.com等。

比较

两种证书各有优点,startssl支持多域名,腾讯云证书只支持单个非顶级域名,而腾讯云证书申请简便,startssl相对麻烦。但是有一个startssl有个致命缺点,就是chrome封杀了免费版的startssl证书。

部署

1
2
cd /etc/pki/nginx/
#没有的目录直接mkdir

startssl证书

文件目录结构

1
2
3
4
|- ApacheServer.zip
|- IISServer.zip
|- NginxServer.zip
|- OtherServer.zip

根据你的服务器选择所需的文件,我这里配置的是Nginx。解压NginxServer.zip,将其中的文件和‘生成证书’步骤中生成的your_file_name.key同时上传到服务器的 /etc/pki/nginx/目录下

腾讯云证书

文件目录结构

1
2
3
4
5
|- Apache
|- IIS
|- Nginx
|- 1_www.dev-heaven.com_bundle.crt
|- 2_www.dev-heaven.com.key

配置Nginx

我的nginx version: nginx/1.10.2,其他版本的请自行配置。

在Nginx主配置nginx.conf文件中,将以下内容的注释去掉

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name _;
root /usr/share/nginx/html;
ssl_certificate "/etc/pki/nginx/1_www.dev-heaven.com_bundle.crt";
ssl_certificate_key "/etc/pki/nginx/2_www.dev-heaven.com.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

将ssl_certificate 和 ssl_certificate_key替换成你自己的key和crt文件。重启Nginx即可,注意是重启,而不是 nginx -s reload

在子配置文件中,比如我的是 dev-heaven.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 443;
server_name www.dev-heaven.com dev-heaven.com;
root /home/dev/www-data/blog;
location / {
index index.html;
}
location ~* \.(gif|jpg|png)$ {
expires 30d;
}
}
server {
listen 80;
server_name www.dev-heaven.com dev-heaven.com;
# 将http访问自动跳转到https
rewrite ^/(.*)$ https://www.dev-heaven.com/$1 permanent;
}

至此,HTTPS升级基本完成了,有问题可以发邮件给我:jarvan4dev@163.com

补充

由于使用了七牛云存储,如果未使用HTTPS的CDN,即使主站配置了HTTPS,浏览器一样不会标识网站为安全网站,如图:

firefox
chrom

提示很明显,是因为HTTPS网站中混入了http链接,所以下面对七牛CDN升级为HTTPS。

升级步骤

  1. 在云控制台新建加速域名
  2. 填入你要加速的域名
  3. 点击如图所示的证书管理,进入证书申请页面
  4. 点击申请证书
  5. 填写证书申请的信息
  6. 申请结果
    在域名解析中创建CNAME,分别将key value填入
  7. 设置加速域名
    如果不想麻烦,可以使用默认的HTTPS域名,这样可以省略前面6步
  8. 等待HTTPS设置生效
  9. 在存储空间中设置默认的外链host为HTTPS

至此,HTTPS升级全部完成!

我知道是不会有人点的,但万一有人想不开呢!