免费申请https证书——Let’s Encrypt SSL

近段时间 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, 或者登录后直接打开 链接,添加并获取AccessKeyIDAccessKeySecret,存在旧的也可以直接使用。

其他类型的可以参考dnsapi文档

三、生成证书

使用阿里云的dns,所以下面的dns参数是dns_ali, 例如我们申请1024fuli.com这个域名的泛域名证书

$ export Ali_Key="[参数是上面申请的AccessKeyID]"
$ export Ali_Secret="[参数是上面申请的AccessKeySecret]"
$ acme.sh --issue --dns dns_ali -d 1024fuli.com -d *.1024fuli.com

如果下载失败可以使用 --debug参数打印更多的信息,例如

$ acme.sh --issue --dns dns_ali -d 1024fuli.com -d *.1024fuli.com --debug

等待证书下载并保存,acme.sh 用到的所有文件都放在路径 ~/.acme.sh/, 下载的证书也全部放在这里。

四、安装证书

官方文档建议不要直接使用这个目录下的文件,所以使用命令将生成的证书安装到其他的目录。

例如nginx使用的证书,使用下面的命令将证书复制到/etc/letsencrypt/1024fuli.com/nginx目录中

$ acme.sh --install-cert -d 1024fuli.com --key-file /etc/letsencrypt/1024fuli.com/nginx/key.pem --fullchain-file /etc/letsencrypt/1024fuli.com/nginx/cert.pem

nginx中使用证书

ssl_certificate /etc/letsencrypt/1024fuli.com/nginx/cert.pem;
ssl_certificate_key /etc/letsencrypt/1024fuli.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/1024fuli.com/1024fuli.com.conf,自动更新时会读取这些信息。

也可以强制手动更新

acme.sh --renew -d 1024fuli.com -d *.1024fuli.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"

正文到此结束
本文目录