让代码更简单

ACME shell脚本自动签发/续签CA免费通配符证书

重要:本文最后更新于2022-11-15 13:59:49,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

免费而且支持通配符并自动续签的CA证书,你确定你不要?如果你有很多二级域名站点,狗哥强烈推荐你使用ACME shell脚本自动签发/续签CA泛域名证书免费SSL证书不要白不要,一次部署以后都轻松了。

什么是 ACME

ACME (rfc8555) 是由 ISRG 起草的 PKIX 证书自动化管理的标准,其定义了一套完整的证书验证、签发、续期更新、吊销等协议,用于管理证书的生命周期。 其特点是减少人工干预,提高安全性,提高系统的可靠性。

详细的ACME定义,可以在 RFC8555: Automatic Certificate Management Environment (ACME) 查阅到。

安装 ACME.sh

下面的邮箱换成你的

复制
curl https://get.acme.sh | sh -s email=my@example.com

鉴于国内的网络环境,如果上面官方下载地址失败 或者 太慢,可以选用国内的备用地址:

复制
curl https://gitcode.net/cert/cn-acme.sh/-/raw/master/install.sh?inline=false -s | sh -s email=my@example.com

安装完成后断开ssh,并重新连接,以使acme生效,然后执行命令,显示版本则说明安装成功

复制
➜ ~ acme.sh --version
https://github.com/acmesh-official/acme.sh
v3.0.3

安装过程如果提示如下信息请忽略,因为 HiCA 不支持 standalone 模式。

复制
It is recommended to install socat first.
We use socat for standalone server if you use standalone mode.
If you don't use standalone mode, just ignore this warning.

注册

将下面的邮箱信息改为你自己的

复制
acme.sh --register-account --accountemail \
    my@example.com \
    --server http://acme.hi.cn/directory

注册成功示例如下

复制
❯ acme.sh --register-account --accountemail \
    <change@email.address> \
    --server http://acme.hi.cn/directory
[2022年 8月 2日 星期二 21时38分53秒 CST] Registering account: http://acme.hi.cn/directory
[2022年 8月 2日 星期二 21时38分55秒 CST] Registered
[2022年 8月 2日 星期二 21时38分55秒 CST] ACCOUNT_THUMBPRINT='pAQLaWoYYD5PXp1YbrqFtF3BcU_bv3Ns96c51VyT80g'

单个域名签发证书

自行修改域名与站点路径

复制
acme.sh --issue -d example.com -w /home/username/public_html

同一证书中的多个域名

复制
acme.sh --issue -d example.com -d www.example.com -d cp.example.com -w /home/wwwroot/example.com

泛域名签发证书

开始前先设置dns解析验证需要的信息,这里以阿里云为例,先创建一个子账号,仅授权AliyunDNSFullAccess 

ACME shell脚本自动签发/续签CA证书

然后将AccessKey与Secret写入到环境变量中,使用如下命令

复制
export Ali_Key="你申请的Key"
export Ali_Secret="你申请的Secret"

替换上面你的内容后执行,然后使用如下命令签发证书

复制
acme.sh --issue \
    --dns dns_ali \
    -d \*.你的域名 \
    -d 顶级域名【一定要写】 \
    --days 150 \
    --server https://acme.hi.cn/directory

执行后等待签发即可,如果出现dns修改失败的情况,请检查你的域名是不是阿里云的,不是的话请修改上面的命令,腾讯云的使用dns_dp,更多dns名称可见:dns名称及教程

签发后在/root/.acme.sh/目录下会生成一个你的域名文件夹,里面存放的是你的证书文件

证书(Certificate) – *.cer *.crt
私钥(Private Key) – *.key
证书签名请求(Certificate signing request) – *.csr
证书吊销列表(Certificate Revocation List) – *.crl

然后将其复制到宝塔里就可以使用了。

将证书安装到 Apache/Nginx

生成证书后,您可能希望将证书安装/复制到您的 Apache/Nginx 或其他服务器。您必须使用此命令将证书复制到目标文件,不要使用~/.acme.sh/文件夹中的证书文件,它们仅供内部使用,文件夹结构将来可能会更改。

Apache示例:

复制
acme.sh --install-cert -d example.com \
--cert-file      /path/to/certfile/in/apache/cert.pem  \
--key-file       /path/to/keyfile/in/apache/key.pem  \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd     "service apache2 force-reload"

Nginx示例:

复制
acme.sh --install-cert -d example.com \
--key-file       /path/to/keyfile/in/nginx/key.pem  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd     "service nginx force-reload"

只有域是必需的,所有其他参数都是可选的。example.com换成你申请证书的域名,如果是泛域名,请写*.你的域名。宝塔的nginx重载命令为/etc/init.d/nginx reload,宝塔ssl保存路径为/www/server/panel/vhost/ssl/域名,宝塔的证书名为privkey.pemfullchain.pem所以上面的代码应改为

复制
acme.sh --install-cert -d *.顶级域名 \
--key-file       /www/server/panel/vhost/ssl/域名/privkey.pem  \
--fullchain-file /www/server/panel/vhost/ssl/域名/fullchain.pem \
--reloadcmd     "/etc/init.d/nginx reload"

保留现有文件的所有权和权限信息。您可以预先创建文件以定义所有权和权限。

安装/复制证书/密钥到生产 Apache 或 Nginx 路径。

默认情况下,证书将每60天更新一次(可配置)。更新证书后,Apache/Nginx 服务将通过命令自动重新加载:service apache2 force-reloadservice nginx force-reload

请注意:reloadcmd 非常重要。证书可以自动更新,但是,如果没有正确的“reloadcmd”,证书可能不会刷新到您的服务器(如 nginx 或 apache),那么您的网站将无法在 60 天内显示更新的证书。

到此就差不多了,到期时acme脚本会自动续期,并配置nginx然后重载刷新证书,搞定,再也不用一个一个的去配置二级域名证书了,哈哈哈。如果不会,可以联系狗哥获取技术支持。

感觉很棒!可以赞赏支持我哟~

0 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐