当前位置: 首页 > news >正文

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

前言

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

为什么要用HTTPS

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

Certbot是什么

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

实战操作
安装Certbot

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

sudo yum update
sudo yum install certbot
获取阿里云参数

获取 AccessKey ID 和 AccessKey Secret

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

获取地域ID

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

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

安装 certbot-dns-aliyun

安装 aliyun cli 工具

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)

aliyun configure set  --profile AkProfile --mode AK  --access-key-id **** --access-key-secret ****   --region ****

 激活刚配置的凭证

aliyun ecs DescribeInstances --profile AkProfile

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

 安装 certbot-dns-aliyun 插件

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 记录。以下是申请证书的命令:

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配置文件

    server {listen 80;server_name  11.22.com;# 将 HTTP 请求重定向到 HTTPSreturn 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 Certbotssl_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

crontab -e

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

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。

验证续期

手动测试续期

certbot renew --dry-run --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean"

检查证书状态

certbot certificates
常见问题排查

没有日志输出

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

sudo touch /var/log/certbot-renew.log
sudo chmod 644 /var/log/certbot-renew.log

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

grep CRON /var/log/syslog

证书未到期

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

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

http://www.dtcms.com/a/390998.html

相关文章:

  • scTenifoldKnk:“虚拟敲除基因”,查看转录组其他基因的变化幅度(升高or降低)
  • 牛客算法基础noob47 校门外的树
  • AD-GS:稀疏视角 3D Gaussian Splatting 的“交替致密化”,同时抑制浮游物与保留细节
  • maven package多出来一个xxx.jar.original和一个xxx-shaded.jar是什么?怎么去掉
  • Gin 框架中使用 Validator 进行参数校验的完整指南
  • apt install nvidia-cuda-toolkit后cuda不在/usr/local/cuda怎么办
  • SpringBoot整合Kafka总结
  • Parasoft C/C++test 针对 CMake 项目的自动化测试配置
  • LED强光手电筒MCU控制方案开发分析
  • linux中为什么 rm 命令能删除自己 | linux使用rm命令删自己会怎样?
  • django登录注册案例(下)
  • 【TES600G】基于JFM7K325T FPGA+FT-M6678 DSP的全国产化信号处理平台
  • 卷积神经网络深度解析:从基础原理到实战应用的完整指南
  • 企业档案管理系统:精准破局制造行业档案管理困境
  • 【完整源码+数据集+部署教程】考古坑洞私挖盗洞图像分割系统: yolov8-seg-act
  • MMDB详解
  • TC8:SOMEIP_ETS_130测试用例解析
  • 等效学习率翻倍?梯度累积三连坑:未除以 accum_steps、调度器步进错位、梯度裁剪/正则标度错误(含可复现实验与修复模板)
  • 嵌入式学习笔记(44)IMX6ULL
  • OpenStack 学习笔记(五):网络管理和虚拟网络实践与存储管理实验(下)
  • 博睿数据携手华为共筑智能未来,深度参与HUAWEI CONNECT 2025并发表主题演讲
  • 陈童理论物理新讲1 哈密顿力学初步
  • 9.19 Sass
  • 设计模式详解:单例模式、工厂方法模式、抽象工厂模式
  • 终端同居物语:Shell咏唱术式与权限结界の完全解析书
  • XeLaTeX 中文删除线自动换行问题的解决方案
  • R语言中的因子(Factor)详解 factor_path <- as.factor(char_path)
  • 软件测试之⾃动化测试常⽤函数(沉淀中)
  • 火山引擎多模态数据湖:基于 Daft 与 Lance,构筑 AI 时代数据湖新范式
  • 关于强化学习的一篇经典学习文章