阿里云服务器如何安装和续签Let’s Encrypt免费证书

Let’s Encrypt 是一个免费的、自动化的、开放的证书颁发机构(CA),旨在通过提供免费的SSL/TLS证书来提高整个互联网的安全性。本文将详细介绍如何在阿里云服务器上安装Let’s Encrypt免费证书,并使用Certbot工具实现证书的自动续签。

安装前的准备

在开始安装Let’s Encrypt免费证书之前,请确保你的服务器已经安装了Nginx,并且域名已经解析到服务器的IP地址。如果你的服务器使用的是Alibaba Cloud Linux系统,可以使用以下命令来安装Nginx:

Terminal window
1
sudo yum install nginx -y
2
sudo systemctl start nginx
3
sudo systemctl enable nginx

安装Certbot

Certbot 是 EFF 开发的一个自动化客户端工具,用于从 Let’s Encrypt 获取和安装证书。我们需要使用yum命令来安装Certbot及其相关组件。

  1. 添加EPEL仓库:
Terminal window
1
sudo yum install epel-release -y
2
3
# 如果上述命令安装报错,可先卸载epel-aliyuncs-release再重新安装
4
sudo yum remove epel-aliyuncs-release -y
5
sudo yum install epel-release -y
  1. 安装Certbot和Nginx插件:
Terminal window
1
sudo yum install certbot python3-certbot-nginx -y

获取和安装证书

安装完Certbot后,可以通过以下命令为所有二级域名统一签发证书,将example.com替换为你的真实域名:

Terminal window
1
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com

该命令会询问你一系列问题,并会生成一个txt记录需要你记录到dns服务器上,如图所示: txtdns

到阿里云云解析DNS中找到当前域名,添加一个txt记录,把上图中出现的记录值记录进去,如下图所示: addtxtdns

检查dns txt记录是否正确,正确后回到终端回车即可,如下图所示: txtdnscheck

Certbot完成后,你的证书和密钥文件通常会存储在/etc/letsencrypt/live/你的域名/目录中。

编辑Nginx配置文件以使用新的SSL证书,通常位于 /etc/nginx/conf.d/ 目录中。

Terminal window
1
sudo vim /etc/nginx/conf.d/www.conf

添加如下代码,并将yourdomain替换为你自己的domain:

Terminal window
1
server {
2
listen 80;
3
server_name yourdomain.com *.yourdomain.com;
4
5
# 重定向到HTTPS
6
return 301 https://$host$request_uri;
7
}
8
9
server {
10
listen 443 ssl;
11
server_name yourdomain.com *.yourdomain.com;
12
13
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
14
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
15
16
ssl_protocols TLSv1.2 TLSv1.3;
17
ssl_ciphers HIGH:!aNULL:!MD5;
18
19
# 其他Nginx配置,如根目录、索引文件等
20
root /var/www/html;
21
index index.html;
22
23
location / {
24
try_files $uri $uri/ =404;
25
}
26
}

使用以下命令重新加载Nginx:

Terminal window
1
sudo systemctl reload nginx

配置自动续签

Let’s Encrypt 证书的有效期为90天,因此我们需要配置自动续签以确保证书始终有效。Certbot 提供了一个cron任务,可以自动检查并续签即将到期的证书。

使用以下命令测试续签证书:

Terminal window
1
sudo certbot renew --dry-run

会发现报错,原因是Certbot是通过DNS方式申请域名证书,因此在续订时需要更新 DNS 记录,所以直接使用 certbot renew 更新会报错。我们可以使用[certbot-dns-aliyun]脚本来自动调用阿里云接口,实现自动申请和续签证书。

安装Aliyun CLI工具:

Terminal window
1
wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
2
tar xzvf aliyun-cli-linux-latest-amd64.tgz
3
sudo cp aliyun /usr/local/bin
4
rm -rf aliyun

配置用户

登录 https://ram.console.aliyun.com/ 添加用户,开启 OpenAPI 调用访问权限,并添加AliyunDNSFullAccess 授权。完成后需要记录AccessKeyID 和 AccessKeySecret,并回到服务器执行如下代码:

Terminal window
1
sudo aliyun configure

根据引导填入相应信息:

Terminal window
1
Access Key Id []: AccessKeyID
2
Access Key Secret []: AccessKeySecret
3
Default Region Id []: cn-beijing
4
Default Output Format [json]: json (Only support json)
5
Default Language [zh|en] en: zh

成功后会显示

Terminal window
1
Configure Done!!!
2
..............888888888888888888888 ........=8888888888888888888D=..............
3
...........88888888888888888888888 ..........D8888888888888888888888I...........
4
.........,8888888888888ZI: ...........................=Z88D8888888888D..........
5
.........+88888888 ..........................................88888888D..........
6
.........+88888888 .......Welcome to use Alibaba Cloud.......O8888888D..........
7
.........+88888888 ............. ************* ..............O8888888D..........
8
.........+88888888 .... Command Line Interface(Reloaded) ....O8888888D..........
9
.........+88888888...........................................88888888D..........
10
..........D888888888888DO+. ..........................?ND888888888888D..........
11
...........O8888888888888888888888...........D8888888888888888888888=...........
12
............ .:D8888888888888888888.........78888888888888888888O ..............

如有报错,请检查是否有开启 OpenAPI 调用访问权限,并添加AliyunDNSFullAccess 授权。

安装cerbot-dns-aliyun

Terminal window
1
wget https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh
2
sudo cp alidns.sh /usr/local/bin
3
sudo chmod +x /usr/local/bin/alidns.sh
4
sudo ln -s /usr/local/bin/alidns.sh /usr/local/bin/alidns
5
rm alidns.sh

如果https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh无法下载,可本地下载后上传到服务器。

续签

Terminal window
1
# 测试申请
2
certbot certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run
3
4
# 测试续签
5
certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run
6
7
# 正式申请和续签去掉 --dry-run 参数

设置定时任务实现自动续签

Terminal window
1
crontab -e

输入以下内容:

Terminal window
1
0 2 1 */1 * root certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --deploy-hook "nginx -s reload"

该任务将在每月的1号的凌晨2点0分执行一次,使用手动模式进行证书续签,续签成功后重新加载Nginx,以应用新的证书。在Crontab中,定时任务的格式由五个星号组成,这五个星号分别代表分钟(0 – 59)、小时(0 – 23)、日期(1 – 31)、月份(1 – 12)、星期几(0 – 7,0和7都表示星期日)。

总结

本文详细介绍了如何在服务器上安装Let’s Encrypt证书,使用Certbot工具获取和安装证书,以及配置自动续签的方法。通过这些步骤,你可以确保你的服务器始终使用有效的SSL/TLS证书,提高网站的安全性。

美团外卖红包 饿了么红包 支付宝红包