近段时间 HTTPS 被炒的火热,除了Chrome声明将把所有 HTTP 网站标记为“不安全”网站外,苹果也宣布将在今年对应用商店的 APP 强制开启 HTTPS。
购买ssl证书一年要上千,Let’s Encrypt提供免费的SSL证书服务,对于一般的用户而言,免费Let’s Encrypt 证书已经足够使用。并且Let’s Encrypt 是开源证书,也是免费证书里口碑较好的证
书,因此许多开发者和博客站长都会选择部署该类证书。这里分享下利用acme.sh在linux上申请证书和部署 HTTPS 过程。
一、安装
参考 acme.sh文档
$ curl https://get.acme.sh | sh
阿里云服务器中上面的方式不能下载到,可以使用下面的方式:
$ curl https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh | INSTALLONLINE=1 sh
使用命令source ~/.bashrc让alias生效,或者再次执行
$ alias acme.sh=~/.acme.sh/acme.sh
二、添加DNSAPI密钥
我使用阿里云的域名,所以直接先添加阿里云的dnsapi, 登录阿里云控制台-头像-accesskeys, 或者登录后直接打开 链接,添加并获取AccessKeyID
和AccessKeySecret
,存在旧的也可以直接使用。
其他类型的可以参考dnsapi文档
三、生成证书
使用阿里云的dns,所以下面的dns参数是dns_ali
, 例如我们申请zuike7.com
这个域名的泛域名证书
$ export Ali_Key="[参数是上面申请的AccessKeyID]"
$ export Ali_Secret="[参数是上面申请的AccessKeySecret]"
$ acme.sh --issue --dns dns_ali -d zuike7.com -d *.zuike7.com
如果下载失败可以使用 --debug
参数打印更多的信息,例如
$ acme.sh --issue --dns dns_ali -d zuike7.com -d *.zuike7.com --debug
等待证书下载并保存,acme.sh
用到的所有文件都放在路径 ~/.acme.sh/
, 下载的证书也全部放在这里。
四、安装证书
官方文档建议不要直接使用这个目录下的文件,所以使用命令将生成的证书安装到其他的目录。
例如nginx使用的证书,使用下面的命令将证书复制到/etc/letsencrypt/1024fuli.com/nginx
目录中
$ acme.sh --install-cert -d 1024fuli.com --key-file /etc/letsencrypt/zuike7.com/nginx/key.pem --fullchain-file /etc/letsencrypt/1024fuli.com/nginx/cert.pem
nginx中使用证书
ssl_certificate /etc/letsencrypt/zuike7.com/nginx/cert.pem;
ssl_certificate_key /etc/letsencrypt/zuike7.com/nginx/key.pem;
重新加载nginx配置
$ nginx -s reload
五、证书更新
acme.sh
安装时默认添加了一个自动更新证书的定时任务
57 0 * * * "~/.acme.sh"/acme.sh --cron --home "~/.acme.sh" > /dev/null
所以证书是可以自动更新了,上面的dnsapi账号信息保存到了~/.acme.sh/account.conf
文件中,安装的目录保存到了~/.acme.sh/zuike7.com/zuike7.com.conf
,自动更新时会读取这些信息。
也可以强制手动更新
acme.sh --renew -d zuike7.com -d *.zuike7.com --force
六、 acme.sh 更新
手动更新
$ acme.sh --upgrade
设置自动更新
acme.sh --upgrade --auto-upgrade
取消自动更新
acme.sh --upgrade --auto-upgrade 0
七、 acme.sh 卸载
删除文件夹~/.acme.sh
使用 crontab -e
删除生成的定时任务
删除别名 unalias acme.sh
删除~/.bashrc
中的 . "/root/.acme.sh/acme.sh.env"