给自己的blog加上https证书

简介

现在站点https化已经是大势所趋。
站点在https后,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。

在这里选一个免费的https证书。
https://letsencrypt.org/
他的证书有效期只有三个月,三个月后可以续签。
生成证书方便快捷。

操作

下载签名工具

wget https://dl.eff.org/certbot-auto

给执行权限

chmod a+x ./certbot-auto

测试是否成功

./certbot-auto --help

构建生成证书

./certbot-auto certonly --webroot -w <webrootpath> -d <domain>
<webrootpath>填入自的web项目根目录路径
<domain> 填入自己要签名的域名
比如我自己的站点就是./certbot-auto certonly --webroot -w /opt/blog/public -d blog.fengcl.com

提示成功

1
2
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at ...

提示这个,就是成功了

相关配置

生成的证书与密钥放位置

/etc/letsencrypt/live/<domain>/fullchain.pem
/etc/letsencrypt/live/<domain>/privkey.pem

nginx 默认配置

默认web目录为/var/www/html
默认配置文件为/etc/nginx/nginx.conf

nginx 参考配置

root ,ssl_certificate ,ssl_certificate_key 要按实际情况配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 80 ;
server_name blog.fengcl.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name blog.fengcl.com;
ssl_certificate /etc/letsencrypt/live/blog.fengcl.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/blog.fengcl.com/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

root /opt/blog/public;
}

更多

https://mozilla.github.io/server-side-tls/ssl-config-generator/
这里可以生成nginx 的配置文件

原理

在执行certbot-auto会在web 的root目录创建.well-known这样一个文件夹,在这个文件夹中会生成一些数据。let’s encrypt 的验证服务器就访问这个地址,看能不能得这数据。
如果成得到,说明这个你有这个域名的拥有权。

验证服务器的useragnet

Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)

验证服务器的请求的地址

GET /.well-known/acme-challenge/<随机数>

验证https的安全性

https://myssl.com/

参考

https://linuxstory.org/deploy-lets-encrypt-ssl-certificate-with-certbot/
https://ksmx.me/letsencrypt-ssl-https/
https://aotu.io/notes/2016/08/16/nginx-https/index.html