Http升级Https使用Certbot申请证书并免费续期

前言

将项目中Http升级Https申请证书的使用到的技术和经验进行分享及记录。

为什么要用HTTPS

确保网站安全和隐私保护。它通过加密连接,防止数据在传输过程中被窃取或篡改。

Certbot是什么

Certbot是一款由电子前沿基金会(EFF)开发和维护的免费开源工具,旨在自动化配置和管理Linux、Apache及Nginx服务器上的SSL/TLS证书。它能够自动完成域名验证并安装证书,简化了安全证书的管理流程。

实战操作
安装Certbot

如果你的服务器上还没有安装 Certbot,可以通过以下命令安装:

bash 复制代码
sudo yum update
sudo yum install certbot
获取阿里云参数

获取 AccessKey ID 和 AccessKey Secret

注意: 创建后获取到 AccessKey ID 和 AccessKey Secret 后应立即保存, 页面关闭后就看不到了

获取地域ID

看服务器所属的地域: 云服务器管理控制台

搜索地域ID,会出来一个地域ID的帮助文档,找到对应的地域ID

安装 certbot-dns-aliyun

安装 aliyun cli 工具

bash 复制代码
wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
tar xzvf aliyun-cli-linux-latest-amd64.tgz
mv aliyun /usr/local/bin

配置凭证

号处填上上面获取到的 AccessKey ID,AccessKey Secret, 地域Id(region)

bash 复制代码
aliyun configure set  --profile AkProfile --mode AK  --access-key-id **** --access-key-secret ****   --region ****

激活刚配置的凭证

bash 复制代码
aliyun ecs DescribeInstances --profile AkProfile

凭证保留位置: ~/.aliyun/

安装 certbot-dns-aliyun 插件

bash 复制代码
wget https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh
sudo mv alidns.sh /usr/local/bin
sudo chmod +x /usr/local/bin/alidns.sh
sudo ln -s /usr/local/bin/alidns.sh /usr/local/bin/alidns
申请证书

使用 Certbot 申请证书时,我们需要指定 DNS 挑战,并调用 alidns 脚本自动添加 DNS 记录。以下是申请证书的命令:

bash 复制代码
certbot certonly  -d www.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean"

参数说明 - -d http://example.com:指定域名(可以指定多个域名)。 - manual:手动模式。 - preferred-challenges dns:使用 DNS 挑战。 - manual-auth-hook "alidns":在 DNS 挑战时调用 alidns 脚本。 - manual-cleanup-hook "alidns clean":在 DNS 挑战完成后调用 alidns clean 脚本。 - --dry-run:模拟续期过程,不会实际续期证书。正式申请时去掉--dry-run参数:

nginx配置文件

bash 复制代码
    server {
        listen 80;
        server_name  11.22.com;

    # 将 HTTP 请求重定向到 HTTPS
       return 301 https://$host$request_uri;
    }
    
        server {
		listen       443 ssl;
		server_name  11.22.com;


		#ssl证书的pem文件路径
		ssl_certificate /etc/letsencrypt/live/11.22.com/fullchain.pem; # managed by Certbot
		#ssl证书的key文件路径
		ssl_certificate_key /etc/letsencrypt/live/11.22.com/privkey.pem; # managed by Certbot
		ssl_session_timeout 5m;
		ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
		add_header Content-Security-Policy "upgrade-insecure-requests;connect-src *";

		location ^~/api {
		    proxy_set_header Host $host;
		    proxy_set_header X-Real-IP $remote_addr;
		    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		    proxy_buffering off;
		    rewrite ^/api/(.*)$ /$1 break;
		    proxy_pass http://11.22.33.5:8200;
		}


		location / {
		    root /usr/share/nginx/html/dist;
		    index  index.html;
		    try_files $uri $uri/ /index.html;
		}
	}
设置自动续期

Certbot 默认会在证书到期前 30 天内自动续期。我们可以通过设置 cron 任务来实现自动化续期。

编辑 crontab

bash 复制代码
crontab -e

添加续期任务(每天凌晨 2:00 执行续期任务)

bash 复制代码
0 2 * * * certbot renew --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --deploy-hook "nginx -s reload" >> /var/log/certbot-renew.log 2>&1

参数说明 - 0 2 * :每天凌晨 2:00 执行任务。 - --quiet:静默模式,减少日志输出。 - --preferred-challenges dns:指定使用 DNS 挑战。 - --manual-auth-hook "alidns":在 DNS 挑战时调用 alidns 脚本。 - --manual-cleanup-hook "alidns clean":在 DNS 挑战完成后调用 alidns clean 脚本。 - --deploy-hook "nginx -s reload":在证书成功续期后重启 Nginx。 - >> /var/log/certbot-renew.log 2>&1:将日志输出到 /var/log/certbot-renew.log。

验证续期

手动测试续期

bash 复制代码
certbot renew --dry-run --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean"

检查证书状态

bash 复制代码
certbot certificates
常见问题排查

没有日志输出

如果 /var/log/certbot-renew.log 没有日志输出,可能是以下原因: 权限问题:确保日志文件可写:

bash 复制代码
sudo touch /var/log/certbot-renew.log
sudo chmod 644 /var/log/certbot-renew.log

cron 任务未执行:检查 cron 日志:

bash 复制代码
grep CRON /var/log/syslog

证书未到期

如果证书未到期,Certbot 会跳过续期。可以通过以下命令强制续期:

bash 复制代码
certbot renew --force-renewal --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean"
总结

通过 Certbot 和阿里云 DNS 的集成,我们可以轻松实现 SSL 证书的自动续期。只需设置一次 cron 任务,Certbot 就会在证书到期前自动续期,并调用 alidns 脚本处理 DNS 挑战。

原文借鉴:https://zhuanlan.zhihu.com/p/24453419814

相关推荐
蒋星熠6 小时前
网络协议深度解析:从OSI七层模型到现代互联网通信的技术实战
网络·后端·python·网络协议·http·性能优化·tcp
2501_915921437 小时前
iOS App 混淆与热更新兼容实战 混淆后如何安全可靠地推送热修复(Hotfix)与灰度回滚
android·ios·小程序·https·uni-app·iphone·webview
2501_915918417 小时前
iOS 26 软件兼容性大检查,哪些 App 出问题、API 变动要注意、旧功能不支持兼容性测试全流程
android·ios·小程序·https·uni-app·iphone·webview
2501_915909068 小时前
App 代上架全流程解析 iOS 应用代上架服务、苹果应用发布步骤、ipa 文件上传与 App Store 审核经验
android·ios·小程序·https·uni-app·iphone·webview
2501_915918418 小时前
iOS 上架流程详细指南 苹果应用发布步骤、ipa 文件上传 打包上架实战经验
android·ios·小程序·https·uni-app·iphone·webview
不努力谁会可怜你?8 小时前
HTTPS报文在SSL/TLS证书安全隧道传输的原理
网络协议·https·stl·ssl·tls
2501_916013748 小时前
Web 抓包全指南 Web抓包工具、浏览器抓包方法、HTTPS 解密
前端·网络协议·ios·小程序·https·uni-app·iphone
Carry_NJ9 小时前
HTTP 状态码(框架自带,通用标准)
网络·网络协议·http
joey小天使11 小时前
阿里云上CentOS6.9(停止维护)导致的yum下载chrony失败如何解决?
阿里云·云计算