1 概述
简单的Let’s Encrypt使用
2 安装
2.1 远程下载安装
curl https://get.acme.sh | sh
下载并安装acme.sh
安装目录在/root/.acme.sh
2.2 github下载安装
git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install
下载github源文件后安装,重新启动bash来刷新环境变量
安装目录在/home/user/.acme.sh
0 0 * * * "/home/fish/.acme.sh"/acme.sh --cron --home "/home/fish/.acme.sh" > /dev/null
安装完成后,会自动添加crontab的定时任务来自动刷新域名,可以用crontab -l来查看该定时任务
3 生成证书
3.1 自动证书
sudo su
export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"
acme.sh --issue --dns dns_ali -d example.com -d *.example.com
目前Let’s Encrypt可以生成泛域名证书,默认有效期只有90天。而且,多个-d参数指定绑定的多个域名。我上面的这段命令是用dns来验证域名的拥有权,acme.sh支持直接输入阿里云解析的key和secert来配置dns解析。注意,进行了这一步以后,acme.sh会自动保存阿里云信息到安装目录的account.conf文件下,方便下次自动刷新时使用
生成的证书就是放在/root/.acme.sh/example.com的文件夹下面。其中,fishedee.com.cer是公有钥匙,fishedee.com.key是私有钥匙,fullchain.cer是包含证书链的公有钥匙。
openssl x509 -in fishedee.com.cer -noout -dates
可以在命令行查看ssl证书的有效期。
对于使用github安装的方式,它会在/home/user/.acme.sh目录下生成,其他流程一样
3.2 手动证书
acme.sh --issue -d fishedee.com -d *.fishedee.com --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
4 配置nginx
upstream gallery {
server localhost:8299;
keepalive 10;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
server_name fishedee.com www.fishedee.com;
location / {
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_pass http://gallery;
}
}
server {
listen 80;
listen [::]:80;
server_name fishedee.com www.fishedee.com;
rewrite ^(.*) https://fishedee.com$1 permanent;
}
这就是一份简单的nginx配置,注意它会将http连接自动转向到https连接。
sudo service nginx restart
配置好以后,重启nginx
我将fishedee.com设置为https以后,依然提示no secure。打开console一看,发现是图床没有使用https。
解决方法很简单,将图床也转为https就可以了。用certbot生成image.fishedee.com的证书,然后放到七牛上就可以了。
5 自动更新证书
由于let’s encrypt的证书只有90天的有效期,剩余30天左右就需要自己去更新证书了,比较麻烦。自带的certbot支持在crontab上加入配置以自动更新证书,但是并没有提供同步到第三方证书的功能,例如是远程的七牛服务。
{
"interval":"1m",
"deploy":[
{
"name":"qiniu_fishedee",
"type":"qiniu",
"access_token":"xxxx",
"access_secert":"xxxx",
"domain":"xxxx"
},
{
"name":"nginx_fishedee",
"type":"nginx",
"address":"127.0.0.1"
}
],
"renew":[
{
"cert_name":"fishedee.com",
"deploy":["nginx_fishedee","qiniu_fishedee"]
}
]
}
因此,顺手写了一个certbot-renew的服务,支持同步七牛服务器的证书。在本地的conf.json输入以上配置,然后make release就可以了。
6 客户端根证书
默认情况下,客户端都会支持Let’s Encrypt签名的证书。但是部分情况下某些客户端并不支持新版的Let’s Encrypt签名,这个时候我们就需要手动添加Let’s Encrypt的根证书了。
- https://letsencrypt.org/certificates/
- https://www.identrust.com/support/downloads
在Mac下,需要将根证书导入到Key Chain中才能正常使用。
7 总结
过程还是比较简单的,一次点亮。原来是使用certbot的,现在改用acme.sh方便多了。
- 本文作者: fishedee
- 版权声明: 本博客所有文章均采用 CC BY-NC-SA 3.0 CN 许可协议,转载必须注明出处!