域名的https证书申请并自动续期

使用Acme做https证书申请

Github:https://github.com/acmesh-official/acme.sh

1. 安装acme.sh

# 安装
curl  https://get.acme.sh | sh

# 给脚本起别名
alias acme.sh=~/.acme.sh/acme.sh

# 验证是否安装成功,出现版本号表示安装成功
acme.sh -v

2. 生成证书

2.1 原理机制

运行生成证书的命令之前需要先了解他的原理机制:

  • 先在 webroot 下创建目录:.well-known/acme-challenge 并在此目录生成一个校验文件(例如:agww2B-ty--atKNEn_2tfTB32US0mNfoeahd3DpA8F4

  • 再通过访问 url 来校验“这台服务器是不是你的?”。

    例如访问 http://mkii.com/.well-known/acme-challenge/agww2B-ty–atKNEn_2tfTB32US0mNfoeahd3DpA8F4 能得到上一步生成的文件

  • 校验通过才会生成证书

2.2 Nginx 配置修改(可选)

做这一步的目的是:我不想把验证文件放在我的网站的目录里边,我使用 Nginx 切换验证文件的位置。所以我指定域名生成的校验文件统一存储在 /opt/ssl-auth 目录,这样我需要在 Nginx 的配置中指定获取校验文件需要到 /opt/ssl-auth 来获取。

Nginx 配置:

匹配以 /.well-known/acme-challenge/ 开头的请求,也就是说:

访问 http://mkii.com/.well-known/acme-challenge/agww2B-ty–atKNEn_2tfTB32US0mNfoeahd3DpA8F4,会去到 /opt/ssl-auth.well-known/acme-challenge/agww2B-ty--atKNEn_2tfTB32US0mNfoeahd3DpA8F4

location ^~ /.well-known/acme-challenge/ { 
    root /opt/ssl-auth/; 
}

2.3 运行生成证书命令

acme.sh --issue -d mkii.com -webroot /opt/ssl-auth/

运行命令,校验成功之后会在/root/.acme.sh/mkii.com/目录生成一些证书文件。注意这里的证书文件不能直接使用,影响在下一步使用

申请成功会打印类似以下的日志

[Wed Mar 10 09:23:51 UTC 2021] Your cert is in  /root/.acme.sh/mkii.com/mkii.com.cer 
[Wed Mar 10 09:23:51 UTC 2021] Your cert key is in  /root/.acme.sh/mkii.com/mkii.com.key 
[Wed Mar 10 09:23:51 UTC 2021] The intermediate CA cert is in  /root/.acme.sh/mkii.com/ca.cer 
[Wed Mar 10 09:23:51 UTC 2021] And the full chain certs is there:  /root/.acme.sh/mkii.com/fullchain.cer

3. 安装证书

基于上一步生成的内部证书文件,生成正式的证书文件,并拷贝到 --key-file--fullchain-file 配置的路径。最后运行强制 reload Nginx,目的是 load 到证书文件。

acme.sh --install-cert -d mkii.com \ 
--key-file /etc/nginx/ssl/mkii.com.key.pem \
--fullchain-file /etc/nginx/ssl/mkii.com.cert.pem \
--reloadcmd "service nginx force-reload"

4. 更新证书

目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心.(未测试)

### 实现阿里云SSL证书自动续期配置 #### 使用 Certbot 和 Aliyun CLI 进行 SSL 证书自动续期 为了实现阿里云 SSL 证书自动续期,可以采用 `Certbot` 结合 `Aliyun DNS API` 的方式来完成这一过程。具体来说: 安装必要的工具包是第一步,在此过程中需要先部署 `aliyun cli` 工具以及 `certbot-dns-aliyun` 插件[^1]。 ```bash pip install --upgrade pip pip install certbot-dns-aliyun ``` 接着设置环境变量以便于后续操作中调用阿里云API接口所需的身份验证信息。 ```bash export ALIBABA_CLOUD_ACCESS_KEY="your-access-key" export ALIBABA_CLOUD_SECRET_KEY="your-secret-key" ``` 申请新的 SSL 证书可以通过执行如下命令来进行,这里指定了域名解析服务商为阿里云DNS,设置了相应的参数用于指定要保护的具体域名单元。 ```bash certbot certonly \ --dns-aliyun \ --dns-aliyun-propagation-seconds 60 \ -d example.com -d www.example.com ``` 对于已经存在的证书文件夹路径 `/etc/letsencrypt/live/example.com/` 下面包含了私钥和公钥等重要资料,这些都将被用来配合Nginx或其他Web服务器软件一起工作以提供HTTPS服务支持。 为了让整个流程更加自动化,还可以编写一个简单的脚本来定期检查尝试更新现有的SSL证书。通常情况下会将此类任务安排到系统的定时任务计划当中去执行,比如Linux下的Cron Jobs就是一种非常方便的选择之一。 编辑crontab文件加入下面这行代码可以让系统每天凌晨两点钟自动检测是否有可用的新版证书可供替换旧版本使用。 ```bash 0 2 * * * /usr/bin/certbot renew --quiet && systemctl reload nginx ``` 上述命令不仅实现了对Let's Encrypt颁发给我们的短期有效期SSL凭证的有效管理;同时也确保了当有新版本发布时能及时获取最新安全补丁从而更好地维护站点安全性。 最后需要注意的是自2023年起,阿里云官方已将其所提供的免费型SSL产品生命周期缩短至90天以内,因此建议广大开发者朋友们尽早规划好各自的证书轮换策略以免影响线上业务正常运转[^2]。 通过以上介绍的方法,可以有效地简化SSL证书管理和维护的工作量,提高效率的同时也增强了网站的安全防护能力[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值