使用 Let's Encrypt 为站点添加 HTTPS
2018-09-19
有了 Certbot 以后,安装证书不能更简单。
访问 https://certbot.eff.org/ 选择自己使用的软件和系统,我选择的是 nginx 和 ubuntu。
然后就三步,第一步安装 Certbot;第二步安装证书,为了不再后续自己配置,直接在命令中带上自己的域名。命令如下:
certbot --nginx certonly -d example.com
,然后就是同意下一步。第三步就是设置证书定期更新了,更新证书命令是/usr/bin/certbot renew --dry-run -d example.com
,利用 crontab 每月一号更新证书,定时命令为:0 4 1 * * certbot renew --post-hook "systemctl restart nginx"
(执行crontab -e
加入这行命令)接下里修改nginx的配置文件,这个地方我们需要借助mozilla提供的ssl配置文件生成器,网址为 https://mozilla.github.io/server-side-tls/ssl-config-generator/ ,注意选择正确的软件和版本,安全要求选择 Intermediate ,最后就生成了配置文件。
比如域名叫做
example.com
,按照 nginx default 的配置文件修改自己的配置文件。创建配置文件/etc/nginx/sites-available/example.com
,将上一步得到的配置信息写入 example.com 的配置文件中。配置文件中
ssl_trusted_certificate
一项配置多余,予以删除。需修改证书文件存放位置,主要是ssl_certificate
、ssl_certificate_key
和ssl_dhparam
三项。其中前两项位置为/etc/letsencrypt/live/example.com/
目录下。然后在生成第三项配置文件,先创建文件夹mkdir -p /etc/nginx/ssl/
,命令为openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
。至此三项配置为:1
2
3ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;之后修改域名和DNS:
1
2server_name example.com;
resolver 8.8.8.8;对配置文件建立软连接到 site-enabled 文件夹
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
,由于 nginx 配置会读这个文件夹下的配置文件,官方的规范也是如此,所以才这么做。然后编辑
/etc/nginx/nginx.conf
去掉server_names_hash_bucket_size
的注释,默认值64即可。如果在此时重启nginx,一定会报错,为什么?因为default中也出现了:
1
2listen 80 default_server;
listen [::]:80 default_server;所以在启动时一定会出错,有两个选择,一是删掉此example.com中80端口的server,将重定向写到default中;另外是禁用default配置,使用example.com配置,选择哪个需要自己选择。之后重启nginx,使用Qualys SSL Labs测试一下自己https分数,一般是 A+(图在底部,放在这里就是出不来……) 。
最后,设置代理。一般情况下我们使用nginx是做反向代理或负载均衡,无论是那种请求都要最终转发到我们的服务应用上,配置如下:
1
2
3
4
5
6
7
8location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
附录,评分图: