网站添加HTTPS / 优化 / 续约
[TOC]
写在前面
- 这里面我主要是自己独立的服务器添加 HTTPS 支持,关于对 GitHub 个人站点添加的以后再写。
- 我的笔记和操作使用的是免费的域名和免费的 HTTPS 证书,但是操作对于所有的来说都是一样的。
- 证书基于 TrustAsia, 别的都差不多的。
- VPS 上用的 LNMP 建站。
用到的站点和准备工作
- 服务器: 搬瓦工
- 域名供应商:Freenom
- HTTPS 证书支持:FreeSSL.org
- 各个网站的账号和权限,域名解析这里就不写了,可以参考另一篇文章
操作步骤
- 首先一定要做的是给自己的网址进行解析好,也就是通过网址能够直接访问到网站 . 然后来到
FreeSSl
这个网站,网站操作很直白,首页填入你自己的域名(一般都是自己拥有的顶级域名,类似于fancyking.ml
这种,而不是二、三级域名,www 可以在以后 301 重定向过来)。TrustAsia
提供的是双域名支持,Let's Encrypt
提供的是多域名的支持,目前是最好申请 V2 的多域名通配符版本。我这里拿的是亚洲诚信。 - 之后,输入邮箱,他会根据你的邮箱去给你证书,证书的生成参数没有特殊需求的话用他的默认参数就行,有的话就按照需求。
- 他会让你去证明网站的归属权,这里我选择的是 DNS 的验证证书,所以我需要把 DNS 域名的解析加上一条 TXT 记录,记录的值他会给你,按照他说的配置好 DNS 那边就好 (如果是国外的 DNS 解析,就像 FreeNom,生效可能比较慢,这个一种方法就是使用其他的解析服务,比如说 DNSPOD+或者 CLOUDXNS 或者其他的方法来加速解析生效,要不你就等一会儿,反正验证失败之后一天内也可以再次在订单列表中验证,但是注意尽量间隔 10 分钟以上)
- 验证成功之后你就会发现你可以下载证书文件(私钥自己看着添加吧,我没加)了,在订单列表中,下载证书,应该会得到压缩包:
chain.zip
. 第一次下载的包里面会有两个文件,一个chain.pem
和private.key
,(得到 crt 文件的一样,就是类型不同,其中chain.pem
是我们的证书文件,它是一个包含中间证书的证书链文件。所以,当你的服务器需要三个文件时,你可以将chain.pem
拆分为两个文件,比如cert.pem
(前部分) 和ca.pem
(后部分)。pem
是兼容crt
的,也就是pem
重命名就可以得到有效的crt
文件) (注意的是,key 文件只有第一次下载的时候有!!!丢失了无法寻找,他网站那边也不留下!!!) . 上传证书文件到服务器,可以不是当前网站目录,在 VPS 上就好。 - 按照站点建立方式的不同,使自己的站点证书指向为当前服务器的绝对地址!下面按照我的 LNMP 给出。
- 一种是有了 SSL 证书再去建站,这个在 LNMP 上配置很简单,因为是引导式船创建站点,所以他会问你是不是要求支持 SSL,这个时候,会有两个选项,一个是自动去 Let's Encrypt 得到证书,这种就是傻瓜式的,输入一个邮箱就好;另一种就是自己获取的 SSL 证书,填入绝对路径就好
- 另一种就是给现有的网站加入 SSL,也很简单,使用命令
lnmp ssl add
然后按照步骤操作就好了。安装需要等一会儿。
强制使用 HTTPS 访问
经过上面的配置,我发现通过 HTTPS 的域名访问确实很正常, 但是一但输入的是没有加 HTTPS 的域名的话,还是不会验证 SSL 证书,所以需要手动的强制都走 https 的域名访问,方法 301 重定向如下:
- 到
/usr/local/nginx/conf/vhost
目录下,找到自己的站点配置文件 比如我的就是 fancyking.ml.conf . 然后在不是 SSL 的那个 server(一般是第一个),里面,加上一行,位置如图片所示: 第七行的 return 301 https……
关于网站 SSL 验证更加严谨
- 这里主要是根据
MySSL
的评测进行的。如果仅仅经过上面的配置评测并不是A+
级别的,也不都是可信或者全绿,既然都上 SSL 了,那就把他弄的好点吧。
我的网站的评测信息 : HERF + 关于 TSL 协议版本 目前 PCIDSS
已经将 TLSv1.0 判定为不合规,所以为了增加网站安全,适合行业标准,禁用 TLSv1.0 协议,默认指定主流 2.0 协议,在 Nginx 的 conf 文件 中加入下面的语句
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
现在主流的浏览器都支持更高版本的 TLS,具体业务不支持的可以在网站评测的客户端握手模拟上看到
- 开启 HSTS
HSTS 是 TLS 的安全保护,保证在配置或者实现错误的情况下,网站仍然按照高安全性访问,具体的功能和不足可以看维基百科 开启 HSTS 的话,依然是在 conf
文件加入一句话,如下
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
上述语句加入生效后,用户在访问过一次网站接收到证书信息和响应头之后,在接下来指定的时间(31536000 即一年)中,用户只能通过 HTTPS 访问网站,比重定向更加安全,并且在指定时间内如果网站证书出了问题,用户无法绕过浏览器警告去访问网站
Let’s Encrypt 证书续约
- 我一开始申请证书的地方无法在不到期的情况下进行续约认证,所以这次学习了一下代码续约,用到的是 Certbot,项目在Github,帮助文档在Docs
安装是交互式的,一般不会出大的问题,就简单说几种情况
参数
- run 获取并安装证书到当前的域名和网站目录
- certonly 获取和续约证书,不进行安装
- renew 在证书未过期时,续约之前获取的所有证书
- -d 后面跟一个网址,每一个域名前面都必须有-d
- --standlone 使用独立的 web server 来验证
- 续约或者获取过程有时会监听 80 端口,如果一直出问题的话,先把 Nginx 关了试一下
- 我最后使用的成功续约的命令如下
./certbot-auto certonly --renew-by-default --email my_email -d fancyking.ml -d www.fancyking.ml
- 证书无论是通过 Certbot 还是在别的网站上获取了,在 Nginx 的配置文件中指定 SSL 的证书公钥私钥存放地址即可,注意开放 443,强行使用 HTTPS 看上面的操作,指定证书语句
ssl_certificate /etc/letsencrypt/live/lfancyking.ml/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/fancyking.ml/privkey.pem;
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »