前言

咕了不知道多久,自己从头开始撸的博客也最终停在了前端样式的编写,实在是前端苦手,又要思考布局又要做样式 (其实是懒

之前也稍微看了一下 hexo 但是在本地写完其实是需要环境来 build 的,又不想折腾一套线上环境,加上我国内这个机子已经荒了快半年了,于是这次刚好借着一些契机直接用 typecho 把博客搭起来算了 (
typecho 的安装就是非常普通的解压然后访问的傻瓜式操作,基本上就是 2 分钟完成搭建,装完想着干脆也一起把 tls 弄起来。

因为长时间不折腾的话总会忘记一些细节操作,一方面为了分享,另一方面也是为了记录所以在这篇文章里面稍微记录一下关键细节。

SSL 证书获取

之前弄证书的时候用过腾讯云的免费证书,还有 certbot, acme.sh,使用下来体感最好的还是 acme.sh,首先没出 bug(certbot 当时折腾的时候出了些 bug),而且现在支持泛域名证书了,其次是配置完之后能自动续签,比起腾讯云手动申请根本就不用自己操心续签和证书过期的问题。

# 安装 acme.sh
curl https://get.acme.sh | sh
# 设置 alias (不知道是不是 bug,安装脚本并没有自动设置 alias)
alias acme.sh=~/.acme.sh/acme.sh

# 设置阿里云 DNS API KEY
export Ali_Key=""
export Ali_Secret=""

# 签发证书
acme.sh --issue -d *.tamce.cn --dns dns_ali

弄完证书就完事儿了, acme 的文档说阿里云(或者其他服务商)的 API KEY 会在第一次使用之后缓存到 ~/.acme.sh/account.conf 以便重复使用,也就是说不需要在 .bashrc 之类的文件设置这样的环境变量,如果不希望保存可以进去删掉(

nginx 的基本 ssl 配置

我直接按照习惯写了一个不附加任何玩意的配置文件启用 ssl,大致如下

server {
  listen 80;
  server_name blog.tamce.cn;
  return 301 https://blog.tamce.cn$request_uri;
}
server {
  listen 443 http2;
  server_name blog.tamce.cn;
  ssl on;
  ssl_certificate /srv/crt/*.tamce.cn/fullchain.cer;
  ssl_certificate_key /srv/crt/*.tamce.cn/*.tamce.cn.key;

  # 其他服务器的基本配置...
}

顺带一提,为了路径优雅,我创建了一个软链接从 /srv/crt 指向 ~/.acme.sh,默认情况下签发的证书都是放在后者目录下的(

配置完这样的配置之后重启 nginx 就可以用 https 访问了,顺便 http 也会被重定向到 https (

Myssl 检测

依稀记得有网站可以进行 SSL/TLS 安全评估,于是查询了一下找到了之前用过的那个网站,用下来体验确实还不错,这里也顺便推荐一下:

直接提交网站运行评估,出来的结果是评级 B(嘛毕竟只是启用了 ssl 而已,其他都是默认设置来着
评估报告上给出了一些减分项和优化措施,也可以参考其提供的文章

我这里主要进行的配置修改是修改了使用的加密方法和 TLS 版本

ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
# 启用 ssl session cache 减少握手延迟
ssl_session_cache builtin:1000 shared:SSL:10m;

完成上面的设置之后运行评估发现评级已经到了 A 了(回头再仔细折腾一下细节
评估报告上也写明了从 A 到 A+ 评级的一个重要指标,那就是启用 HSTS。

HSTS 全称是 Http Strict Transfer Security,也就是严格传输安全,查询之后发现是在 HTTP 响应头加入一行 Strict-Transport-Security 来让浏览器默认访问网站的 https 版本(即使用户输入的是 http 而不是 https)

于是在配置文件中加入:

add_header Strict-Transport-Security "max-age=31536000";

再次运行评估,此时评级就已经达到 A+ 了。
点击下面这个图标可以看到目前我博客的评估报告(

标签: nginx

添加新评论