给博客加上HTTPS

最近因为毕业,有很多的事情要忙,差点忘了还有个很久不写的博客还放在腾讯云优惠学生机上面(差点就寿未终就正寝)

毕业之后腾讯云的学生机也玩不到了,送的域名也是要到期了,干脆就直接域名和服务器都给换了= =

趁着这次重新配置博客的环境,就想顺手上个 https ~

准备

本机的hexo的安装配置这边就略略略了

下面看看服务器端的配置

Nginx

HTTP服务器,没用过Apache所以就选择它来作为HTTP服务器了。
因为是静态博客,只需要有个Nginx指定root路径很快就能配置好一个静态服务器了。

acme.sh

acme.sh是github上某大神写的一个shell脚本,它可以从Let’s Encrypt生成免费的HTTPS证书,并且可以设置自动更新证书,防止证书过期。

使用acme.sh

acme的安装可以直接看github,readme里面有中文版的说明。看这儿:acme.sh

安装

acme的安装很简单,只需要安装好curl即可,然后获取安装脚本并运行。安装脚本会自动将acme.sh安装到当前用户的home目录下,并且将alias等写入.bashrc

1
curl https://get.acme.sh | sh

生成证书

生成证书有两种验证方式。

一种是在网站根目录下防止一个文件,来验证域名的所有权,验证成功之后就可以生成证书。

另一种是通过DNS的方式,在域名解析中添加一条TXT解析记录来验证域名的所有权。

acme提供了自动添加TXT记录完成验证的功能,只需要事先准备好域名解析商所给到的api_id和key即可。

以cloudxns为例,首先登陆cloudxns官网,进入API管理,生成API。

API生成成功之后进行如下操作

1
2
3
4
export CX_Key="1234"
export CX_Secret="sADDsdasdgdsf"
acme.sh --issue --dns dns_cx -d example.com

这样CX_Key和CX_Secret都会保存在~/.acme.sh/account.conf中,当需要的时候回自动调用。

更多的DNS API的使用方法可以看这儿:How to use DNS API

复制证书到Nginx

复制证书必须使用 --installcert 命令,并指定复制的目标位置(路径必须存在)。

指定reloadcmd,在证书更新之后,reloadcmd会被自动调用。

1
2
3
4
acme.sh --installcert -d urzz.me \
--key-file /etc/nginx/ssl/urzz.me.key \
--fullchain-file /etc/nginx/ssl/urzz.me.cer \
--reloadcmd "service nginx force-reload"

更新证书

目前的脚本,证书会在60天之后自动更新。

手动更新
1
acme.sh --renew -d example.com --force

更新

由于let’s encrypt和acme协议都在频繁的更新,因此acme.sh也需要经常更新。

1
2
# --auto-upgrade 设置自动更新
acme.sh --upgrade --auto-upgrade

Nginx 配置

/etc/nginx/nginx.conf 中有一个include,这表示Nginx启东时会解析include后面路径里面的文件

为了便于备份,我创建了/data目录,并将自定义的Nginx配置文件放在此路径下。

Nginx配置大概如下,参考 Nginx 配置 HTTPS 服务器

配置写完之后重启Nginx即可

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
28
29
30
31
32
33
34
35
36
37
38
server {
listen 443 ssl;
server_name urzz.me;
keepalive_timeout 70;
ssl_certificate /etc/nginx/ssl/urzz.me.cer;
ssl_certificate_key /etc/nginx/ssl/urzz.me.key;
add_header Strict-Transport-Security "max-age=31536000;" always;
# 使用DH文件, 在目录 /etc/ssl/certs 运行以下代码生成 dhparam.pem 文件
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-Xss-Protection 1;
root /data/blog;
index index.html;
access_log /data/log/access_blog.log;
error_log /data/log/error_blog.log;
location / {
}
}
server {
listen 80;
server_name urzz.me;
rewrite ^(.*)$ https://urzz.me$1 permanent;
}

小结

现在再访问就可以看到强制使用https了哦也。

虽然只是简单的个人博客,但是用上了绿色的小锁瞬间感觉就不一样了!

这个夜晚的修仙成果还不错~