使用acme.sh来申请SSL证书
简介
acme.sh
实现了 acme
协议, 可以从 letsencrypt
生成免费的证书.
官方文档:https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E
本篇文章以Nginx为例子,来实现获取SSL证书,以及配置Nginx
安装
安装很简单, 一个命令:
1 |
|
my@example.com
是你的邮箱地址
创建 一个 shell 的 alias, 例如 .bashrc,方便你的使用:
1 |
|
普通用户和 root 用户都可以安装使用. 安装过程进行了以下几步:
- 把 acme.sh 安装到你的 home 目录下:
1 |
|
- 自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.
更高级的安装选项请参考: https://github.com/Neilpang/acme.sh/wiki/How-to-install
配置Nginx
先把Nginx配置文件写好,让这个域名可以通过http访问
1 |
|
生成证书
关于生成证书,官方的例子有apache、nginx、手动 dns 的方式,我这里只演示Nginx的方式
官方文档上这样写的
如果你用的 nginx服务器, 或者反代, acme.sh 还可以智能的从 nginx的配置中自动完成验证, 你不需要指定网站根目录:
执行以下命令:
1 |
|
生成好的证书会存放在~/.acme.sh/example.com
下
copy/安装证书
前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.
注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.
正确的使用方法是使用 –install-cert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:
1 |
|
–install-cert: 这个参数代表cpoy
-d: 你的域名
–key-file: copy你的私钥文件,需要和nginx指定的一致
–fullchain-file: copy你的证书链文件(此文件包含自己和中间ca机构的证书),需要和nginx指定的一致
–reloadcmd: 指定重新加载证书的命令
(一个小提醒, 这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload)
Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer ,而非 /etc/nginx/ssl/
–install-cert命令可以携带很多参数, 来指定目标文件. 并且可以指定 reloadcmd, 当证书更新以后, reloadcmd会被自动调用,让服务器生效.
详细参数请参考: https://github.com/Neilpang/acme.sh#3-install-the-issued-cert-to-apachenginx-etc
值得注意的是, 这里指定的所有参数都会被自动记录下来, 并在将来证书自动更新以后, 被再次自动调用.
修改Nginx配置文件
执行上面的命令以后,会发现在/etc/nginx/ssl
目录下会多出两个文件,我们需要把这两个文件在Nginx配置文件中配置好
1 |
|
Nginx配置好后重启Nginx,访问你的域名。
更新证书
目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心.
请确保 cronjob 正确安装, 看起来是类似这样的:
1 |
|
其他常用命令
acme.sh --info -d example.com
:查看已安装证书信息
acme.sh --list
: 列出所有证书
acme.sh --renew -d soulchild.site -d *.soulchild.site --force
: 手动强制更新证书
acme.sh --renew-all
: 手动更新所有证书
acme.sh --revoke
: 撤销证书
acme.sh --remove -d soulchild.site
: 删除证书
acme.sh --cron
: 通过cronjob更新所有证书。
acme.sh --upgrade
: 升级acme.sh
acme.sh --uninstall
: 卸载acme.sh
更新acme.sh
acme.sh --upgrade
:升级到最新版
acme.sh --upgrade --auto-upgrade
:开启自动更新
acme.sh --upgrade --auto-upgrade 0
:关闭自动更新
参考
https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E
https://github.com/oneinstack/oneinstack/blob/master/vhost.sh#L265