Let's Encrypt 证书申请实测
Intro
关于 Let's Encrypt 这个 CA,大概大家都知道了,可以以非常方便的过程签发免费的证书。在这个全民加密的年代,给自己的网站加上 HTTPS 还是很有必要的,可以有效地避免隐私泄露、运营商劫持等问题。这个博客也同样使用 Let's Encrypt 签发的证书,现在就来写写申请的过程是怎样的。
UPDATE: 请查看 acme.sh - 极力推荐的 Let's Encrypt 工具 这篇博文。
网上的教程有相当多的教程是 acme-tiny 这个轻量级的 acme 工具来实现的,但是我在这里还是使用了官方提供的工具,原因如下:
- 对用户友好(交互界面)
- 功能强大(可以 cert, revoke, renew 等)
- 简单(大部分的操作都自动解决了)
- 自动按域名存储到统一的目录下(对我这种懒人特别友好)
当然缺点也十分明显,这玩意就是个开源全家桶……不过反正是 VPS 我也无所谓了,DO 网速也挺快,pass
申请过程
首先关闭 Nginx
sudo service nginx stop
下载 LE 官方提供的工具:
git clone https://github.com/letsencrypt/letsencrypt && cd letsencrypt
然后就可以开始申请过程了,非常方便,需要 root 权限
sudo ./letsencrypt-auto --agree-dev-preview --server \ https://acme-v01.api.letsencrypt.org/directory auth
装好全家桶之后会提示输入邮箱
然后提示输入你的域名,LE 不支持通配,所以要输入完整的域名。例如 files.niconiconi.xyz
。申请很快,下来的证书存储在 /etc/letsencrypt/live/your_domain
。
DHPARAM
理论上证书已经下来了,不过为了增加安全性,最好再有一个 Diffie Hellman Ephemeral Parameters。
进入目录:
cd /etc/ssl/certs
使用 OpenSSL 生成 dhparam.pem:
sudo openssl dhparam -out dhparam.pem 4096
这步要非常多的时间(毕竟 4096 位呢),我的用了半个小时。解释一下各符号的意思:
.
可能的质数+
验证的质数*
找到的质数
配置服务器
以 Nginx 为例,用你最喜欢的编辑器打开配置文件:
sudo vim /etc/nginx/sites-enabled/your_config_file
秀上我的配置
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_dhparam /etc/ssl/certs/dhparam.pem;
}
也可以开启 HSTS,强迫浏览器使用 HTTPS:
add_header Strict-Transport-Security "max-age=2592000; includeSubDomains";
Cool! 现在启动服务器,应该就可以使用 HTTPS 了:
sudo service nginx start
HTTP 重定向
如果想要进一步安全性,可以把 HTTP 重定向到 HTTPS。NGINX 配置如下:
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
这下访问 http://yourdomain.com
的时候,会自动重定向到 https://yourdomain.com
,不需要用户做任何操作。