阿里云服务器如何安装和续签Let’s Encrypt免费证书
- 1234字
- 6分钟
- 2024-07-09
Let’s Encrypt 是一个免费的、自动化的、开放的证书颁发机构(CA),旨在通过提供免费的SSL/TLS证书来提高整个互联网的安全性。本文将详细介绍如何在阿里云服务器上安装Let’s Encrypt免费证书,并使用Certbot工具实现证书的自动续签。
安装前的准备
在开始安装Let’s Encrypt免费证书之前,请确保你的服务器已经安装了Nginx,并且域名已经解析到服务器的IP地址。如果你的服务器使用的是Alibaba Cloud Linux系统,可以使用以下命令来安装Nginx:
1sudo yum install nginx -y2sudo systemctl start nginx3sudo systemctl enable nginx
安装Certbot
Certbot 是 EFF 开发的一个自动化客户端工具,用于从 Let’s Encrypt 获取和安装证书。我们需要使用yum命令来安装Certbot及其相关组件。
- 添加EPEL仓库:
1sudo yum install epel-release -y2
3# 如果上述命令安装报错,可先卸载epel-aliyuncs-release再重新安装4sudo yum remove epel-aliyuncs-release -y5sudo yum install epel-release -y
- 安装Certbot和Nginx插件:
1sudo yum install certbot python3-certbot-nginx -y
获取和安装证书
安装完Certbot后,可以通过以下命令为所有二级域名统一签发证书,将example.com替换为你的真实域名:
1sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
该命令会询问你一系列问题,并会生成一个txt记录需要你记录到dns服务器上,如图所示:
到阿里云云解析DNS中找到当前域名,添加一个txt记录,把上图中出现的记录值记录进去,如下图所示:
检查dns txt记录是否正确,正确后回到终端回车即可,如下图所示:
Certbot完成后,你的证书和密钥文件通常会存储在/etc/letsencrypt/live/你的域名/
目录中。
编辑Nginx配置文件以使用新的SSL证书,通常位于 /etc/nginx/conf.d/ 目录中。
1sudo vim /etc/nginx/conf.d/www.conf
添加如下代码,并将yourdomain替换为你自己的domain:
1server {2 listen 80;3 server_name yourdomain.com *.yourdomain.com;4
5 # 重定向到HTTPS6 return 301 https://$host$request_uri;7}8
9server {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:
1sudo systemctl reload nginx
配置自动续签
Let’s Encrypt 证书的有效期为90天,因此我们需要配置自动续签以确保证书始终有效。Certbot 提供了一个cron任务,可以自动检查并续签即将到期的证书。
使用以下命令测试续签证书:
1sudo certbot renew --dry-run
会发现报错,原因是Certbot是通过DNS方式申请域名证书,因此在续订时需要更新 DNS 记录,所以直接使用 certbot renew 更新会报错。我们可以使用[certbot-dns-aliyun]脚本来自动调用阿里云接口,实现自动申请和续签证书。
安装Aliyun CLI工具:
1wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz2tar xzvf aliyun-cli-linux-latest-amd64.tgz3sudo cp aliyun /usr/local/bin4rm -rf aliyun
配置用户
登录 https://ram.console.aliyun.com/ 添加用户,开启 OpenAPI 调用访问权限,并添加AliyunDNSFullAccess 授权。完成后需要记录AccessKeyID 和 AccessKeySecret,并回到服务器执行如下代码:
1sudo aliyun configure
根据引导填入相应信息:
1Access Key Id []: AccessKeyID2Access Key Secret []: AccessKeySecret3Default Region Id []: cn-beijing4Default Output Format [json]: json (Only support json)5Default Language [zh|en] en: zh
成功后会显示
1Configure 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
1wget https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh2sudo cp alidns.sh /usr/local/bin3sudo chmod +x /usr/local/bin/alidns.sh4sudo ln -s /usr/local/bin/alidns.sh /usr/local/bin/alidns5rm alidns.sh
如果https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh
无法下载,可本地下载后上传到服务器。
续签
1# 测试申请2certbot certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run3
4# 测试续签5certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run6
7# 正式申请和续签去掉 --dry-run 参数
设置定时任务实现自动续签
1crontab -e
输入以下内容:
10 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证书,提高网站的安全性。


