Certbot实现 HTTPS 免费证书(Let‘s Encrypt)自动续期

Certbot实现 HTTPS 自动续期

以前阿里云支持申请一年的免费https证书,那每年我们手动更新证书并没什么大问题,但现在阿里云的免费证书仅支持3个月,这意味着每三个月都要要申请一下证书显得非常麻烦。

下面我们使用Certbot实现ssl证书的自动更新,这次我在Centos8的Nginx上进行演示如何配置SSL证书。

Certbot的安装

以下安装在CentOS8实操通过,其他系统可以参考:https://certbot.eff.org/instructions

要使用Certbot,首先需要安装:

yum install epel-release -y
yum install certbot -y

如果你安装过程中出现 “Couldn’t open file /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8” 的错误,是由于缺少 EPEL 存储库的 GPG 密钥导致的。这个密钥用于验证从 EPEL 存储库下载的软件包的完整性和真实性。

需要先导入 EPEL 存储库的 GPG 密钥:

rpm --import https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-8

然后重新安装上述安装命令即可安装成功。

生成 Let’s Encrypt 免费证书的命令参数

Let’s Encrypt 是免费 HTTPS 证书生成工具之一,由 Internet Security Research Group(ISRG)这个非营利组织提供ISRG的使命是使全球范围内的网站能够安全、自动化地使用HTTPS加密,并提供免费的 SSL/TLS 证书。

虽然 Let’s Encrypt 证书的有效期只有90天,但是可以自动续期。

使用 Certbot 工具生成 Let’s Encrypt 证书的手动验证命令:

certbot certonly --email example@qq.com --agree-tos -d ai.xxxxxx.top --manual --preferred-challenges dns

参数说明:

  • certonly: 用于生成 SSL/TLS 证书的工具插件。
  • --email example@qq.com: Let’s Encrypt 要求提供有效的电子邮件地址
  • --agree-tos:同意 Let’s Encrypt 的服务条款。
  • -d 'test.com':指定您想要为其生成 SSL 证书的域名。你可以通过添加多个 -d 选项来同时为多个域名生成证书。
  • --manual:在命令提示符下手动操作来验证您拥有该域名。
  • --preferred-challenges=dns:使用 DNS 验证方式进行证书颁发,需要将一个特定的 TXT 记录添加到 DNS 进行验证。

生成 Let’s Encrypt 证书的http验证命令:

certbot certonly --email example@qq.com --webroot -w /home/letsencrypt --preferred-challenges http-01 -d example.com

--preferred-challenges http-01:使用HTTP 验证方式生成证书。

--webroot -w /home/letsencrypt:用http做域名验证时,在目录/home/letsencrypt目录下产生对应的验证文件xxxx。

certbot通过访问http://example.com/.well-known/acme-challenge/xxxx便能完成验证。

通过DNS验证生成SSL证书

首先执行以下命令:

certbot certonly --email 604049322@qq.com --agree-tos -d ai.xxx.top --manual --preferred-challenges dns

首先会提示:We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom.

我先输入Y回车同意(也可以输入N拒绝他们给你发邮件),然后出现如下提示:

image-20231212115626549

注意提示中的内容,下面我们在阿里云添加对应解析:

image-20231212115727526

阿里云中配置完成后,回到控制台回车确认,等待十秒钟后,提示Successfully received certificate.表示证书已经生成。

证书存储信息如下:

Certificate is saved at: /etc/letsencrypt/live/ai.xxx.top/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/ai.xxx.top/privkey.pem

此时修改Nginx的配置给需要使用https的server指定ssl证书:

ssl_certificate      /etc/letsencrypt/live/ai.xxx.top/fullchain.pem;
ssl_certificate_key  /etc/letsencrypt/live/ai.xxx.top/privkey.pem;

重启Nginx:

service nginx restart

可以使用以下网站测试目标网站的ssl:https://www.ssllabs.com/ssltest/

注意:使用DNS验证可以很方便的手动生成SSL证书,但是每次续期的时候要求填写的TXT记录都有可能不同,这意味着基于DNS验证的自动续期必须动态修改DNS的TXT记录。

虽然certbot 提供了一个 hook,可以在续期的时候让脚本调用 DNS 服务商的 API 接口动态添加 TXT 记录,但操作毕竟是复杂了很多,所以我们考虑使用j基于HTTP验证来自动续期生成SSL证书。

通过http验证生成SSL证书

certbot需要通过访问域名对应的地址完成验证,例如http://www.xxx.cn/.well-known/acme-challenge/abcd,如果访问无法访问,则需要给Nginx配置该路径可以访问,从而完成验证。

执行以下命令修改配置(根据配置文件实际位置修改):

vi /usr/local/nginx/conf/vhost/proj.conf

注意:一般yum安装的Nginx执行vi /etc/nginx/conf.d/proj.conf

添加如下配置:

server {
    listen 80;
    server_name www.xxxxxx.cn;
    location / {
        return 301 https://$server_name$request_uri;
    }
    location ^~ /.well-known/ {
        root /data/pro/ydz/web;
    }
}

然后使用service nginx reload命令重载配置。

然后通过http验证生成证书:

certbot certonly --email 604049322@qq.com --webroot -w /data/pro/ydz/web --preferred-challenges http-01 -d www.xxx.cn

然后可以看到ssl生成成功的提示Successfully received certificate.

然后就可以增加ssl配置:

server {
	listen 443 ssl http2;
	server_name  www.xxxxxx.cn;
	ssl_certificate      /etc/letsencrypt/live/www.xxxxxx.cn/fullchain.pem;
	ssl_certificate_key  /etc/letsencrypt/live/www.xxxxxx.cn/privkey.pem;
	location / {
	    root    /data/pro/ydz/web;
	    index  index.html index.htm;
	    error_page  404	http://www.xxxxxx.cn;
	}
    location ^~  /.well-known/ {
        root  /data/pro/ydz/web;
    }
}

再次重载配置nginx -s reload(两种命令都可以)。

自动更新证书

使用以下命令即可更新证书:

certbot renew

但有效期超过一个月的会自动跳过。

我们将该命令配置为crontab定时任务即可实现自动续签:

首先执行crontab -e,然后添加以下配置:

0 0 * * 1 /usr/bin/certbot renew >> /var/log/certbot-renew.log

crontab从左至右分别是:分钟、小时、日期、月份、星期几,以上配置代表每周一执行一次证书更新。

实例:配置openai反向代理

演示的操作系统:CentOS 7.6

由于这次我使用7.6版本的CentOS 进行演示,Python默认版本为2.7.5,运行会出现很多问题,所以我需要先调整Python环境:

pip uninstall urllib3 -y
pip uninstall requests -y
pip uninstall chardet -y
yum remove python-requests -y
yum remove python-urllib3 -y
pip install --upgrade --force-reinstall 'requests==2.6.0' urllib3
pip install chardet -U

然后安装certbot:

yum install certbot -y

使用openai会自动将http请求重定向到https上,如果我们的Nginx服务器不支持https就无法正常访问,所以必须配置使用https。

假设我们的域名为ai.haobanok.com。一开始没有SSL证书,首先进行基本配置便于http验证:

vi /etc/nginx/conf.d/gpt.conf

配置一下基本配置:

server {
    listen 80;
    server_name ai.haobanok.com;
    location ^~  /.well-known/ {
        root /var/www;
    }
}

注意:root指定的目录必须是nginx用户有权限访问的目录(否则对应请求都会返回403),上面的目录可以通过如下命令创建:

mkdir /var/www
chown -R nginx:nginx /var/www/

执行nginx -s reload重载配置。

可以尝试访问一下http://ai.haobanok.com/.well-known/acme-challenge/xxx,如果返回404说明正常,返回403大概率是Nginx所使用的用户,没有操作指定目录的权限,需要根据实际情况调整。

接下来我们使用certbot生成证书,直接使用http验证可能会缺少接入点。可以先使用dns验证生成接入点,dns验证命令:

certbot certonly --email example@qq.com --agree-tos -d ai.haobanok.com --manual --preferred-challenges dns

输入N拒绝后,直接Ctrl+C结束进程,接入点便注册完毕。

然后就可以通过http验证生成证书:

certbot certonly --email 604049322@qq.com --webroot -w /var/www --preferred-challenges http-01 -d ai.haobanok.com

稍等几秒钟后,证书生成完毕。由于certbot版本差异,提示信息与前面有所差异,这次生成完成的提示信息为:

-  Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/ai.haobanok.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/ai.haobanok.com/privkey.pem

证书生成完成,我们就可以配置openai反代了:

server {
	allow 183.12.0.0/16;
	allow 117.136.0.0/16;
	allow 27.38.6.0/24;
	allow 113.91.0.0/16;
	deny all;
	listen 80;
	listen 443 ssl http2;
	server_name ai.haobanok.com;
	ssl_certificate      /etc/letsencrypt/live/ai.haobanok.com/fullchain.pem;
	ssl_certificate_key  /etc/letsencrypt/live/ai.haobanok.com/privkey.pem;
	location / {
		proxy_pass  https://api.openai.com/;
		proxy_ssl_server_name on;
		proxy_set_header Host api.openai.com;
		proxy_set_header Connection '';
		proxy_http_version 1.1;
		chunked_transfer_encoding off;
		proxy_buffering off;
		proxy_cache off;
	}
	location ^~  /.well-known/ {
		allow all;
		root  /var/www;
	}
}

执行nginx -s reload重载配置。

保留/.well-known/前缀匹配保证未来更新证书的时候可以进行验证。

执行crontab -e添加每周自动检查更新:

0 0 * * 1 /usr/bin/certbot renew >> /var/log/certbot-renew.log

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/248078.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[Linux] LVS负载均衡群集+NAT部署

一、LVS负载均衡群集知识 1.1 群集的的定义及意义 Cluster,集群(也称群集)由多台主机构成,但对外只表现为一一个整体,只提供一-个访问入口(域名或IP地址), 相当于一台大型计算机。 群集的作用&#xff1…

常用函数之js复制图片至剪切板

背景 最近在工作中遇到了一个需求,点击按钮将Echart图复制到剪切板,然后按Ctrl(command)V可以直接复制到聊天软件&文档编辑器中。本以为这是一个比较简单的需求,好像找了一圈资料,发现事情并不简单&am…

java线程的几种状态

一、线程的状态 Java中的线程有以下几种状态: 1. 新建状态(New):当线程对象被创建但还没有被调用start()方法时,线程处于新建状态。 2. 运行状态(Runnable):当线程启动后&#xff0c…

西瓜视频RenderThread引起的闪退问题攻坚历程

背景 影响 西瓜之前存在过一类RenderThread闪退,从堆栈上看,全部都是系统so调用,给人的第一印象像是一个系统bug,无从下手。闪退集中在Android 5~6上,表现为打开直播间立即闪退。该问题在2022年占据Native Crash Top5&…

C++异步网络库workflow系列教程(3)Series串联任务流

往期教程 如果觉得写的可以,请给一个点赞关注支持一下 观看之前请先看,往期的两篇博客教程,否则这篇博客没办法看懂 workFlow c异步网络库编译教程与简介 C异步网络库workflow入门教程(1)HTTP任务 C异步网络库workflow系列教程(2)redis任务 简介 首先,workflow是任务流的意…

『番外篇二』Swift “黑魔法”之动态获取类实例隐藏属性的值

概览 在 Swift 代码的调试中,我们时常惊叹调试器的无所不能:对于大部分“黑盒”类实例的内容,调试器也都能探查的一清二楚。 想要自己在运行时也能轻松找到 Thread 实例“私有”属性的值吗(比如 seqNum)? 在本篇博文中您将学到如下内容: 概览1. 借我,借我,一双慧眼吧…

Dockerfile创建镜像LNMP+WordPress

目录 实验部署 nginx 配置mysql 配置php 实验部署 INMPwordpress nginx 172.111.0.10 docker-nginx mysql 172.111.0.20 docker-mysql php 172.111.0.30 docker-php nginx 关闭防火墙和安全机制在opt目录创建nginx MySQL php目录 cd nginx mysql php vim Dockerfile#声…

rabbitmq-windows安装使用-简易后台界面-修改密码

文章目录 1.下载2.安装3.安装 RabbitMQ4.后台访问5.修改密码 1.下载 将erlang运行时和rabbitmq-windows版本,上传在csdn,下载链接。https://download.csdn.net/download/m0_67316550/88633443 2.安装 右键,以管理员身份运行rabbitmq。启动…

mysql:修改整数字段的显式长度不生效

例如,我使用mysql 8.2.0版本,想修改整数字段的显式长度,不会生效,提醒整数的显示长度已经废弃,会在将来某个版本去掉: mysql官网中也有说明: https://dev.mysql.com/doc/refman/8.2/en/numeric…

【JetBrains】将Gateway中的GoLand回滚到无bug旧版本

问题背景 2023-12-15 我把 Gateway 中使用的 GoLand 从 2023.2.x 升级到了 2023.3 ,然后编辑文件过程中输入时时不时会显示错误信息,然后就会进入无法输入(键入也不会看到增加字符)但能粘贴的奇怪状态。 问题解决 升级到 2023.…

canvas基本绘制对象

目录 绘制画布 设置画布 绘制圆形 绘制矩形填充渐变色 绘制文字及文字样式 绘制画布 <canvas id"canvas" width"800" height"600"></canvas> 设置画布 //获得画布元素var canvasdocument.getElementById(canvas);var ctxca…

Android BluetoothAdapter 使用(二)

Android BluetoothAdapter 使用(二) 本篇文章主要讲下蓝牙设备的配对. 1: 蓝牙设备列表展示 下 面是蓝牙设备adapter的代码: package com.test.bluetooth;import android.bluetooth.BluetoothDevice; import android.content.Context; import android.view.LayoutInflater;…

人工智能多模态:看、听、说,智能感知的全方位融合

导言 人工智能多模态技术是指通过整合视觉、听觉、语言等多个感知模态的信息&#xff0c;实现对丰富、多样化数据的理解与处理。本文将深入研究人工智能多模态的技术原理、应用场景以及对未来感知智能的影响。 1. 简介 人工智能多模态技术通过整合多个感知模态的信息&#xff…

医学检验系统LIS源码,C# +.Net+Oracle

LIS是HIS的一个组成部分&#xff0c;通过与HIS的无缝连接可以共享HIS中的信息资源&#xff0c;使检验科能与门诊部、住院部、财务科和临床科室等全院各部门之间协同工作。  体系结构&#xff1a;Client/Server架构 客户端&#xff1a;WPFWindows Forms 服务端&#xff1a;C…

stm32项目(12)——基于stm32f407zgt6的频率计设计

1.项目功能 配置stm32自带的定时器&#xff0c;以一定的周期产生中断&#xff0c;在中断服务函数里面&#xff0c;对某个IO口进行取反&#xff0c;这样就在该管脚上产生了一定频率的方波&#xff08;频率可以用按键调节&#xff09;。然后再使用stm32的捕获功能&#xff0c;对产…

解决nuxt3环境中css样式失效的问题

现象: 底部播放器进度条拖动按钮没有了&#xff01; 然后通过chrome开发工具检查html元素的结构&#xff1a; 发现progressbar这个元素是存在的&#xff0c;但是为什么没有显示呢&#xff0c;然后回到代码中&#xff1a; 发现原来是组件的名字写错了&#xff0c;多写了一个字母…

安恒明御安全网关 aaa_local_web_preview文件上传漏洞复现

0x01 产品简介 明御安全网关秉持安全可视、简单有效的理念,以资产为视角,构建全流程防御的下一代安全防护体系,并融合传统防火墙、入侵检测、入侵防御系统、防病毒网关、上网行为管控、VPN网关、威胁情报等安全模块于一体的智慧化安全网关。 0x02 漏洞概述 明御安全网关在…

Axure动态面-轮播图案例,多方式登录案例,后台主界面左侧侧边栏案例

一.轮播图案例 二.多方式登录案例 三. 后台主界面左侧侧边栏案例

中国社科院与新加坡新跃社科大联合培养博士—平凡≠平庸

英国文艺评论家赫兹利特说过&#xff0c;书籍深透骨髓&#xff0c;诗随血液回圈。小时候读书的美好感受&#xff0c;至今犹存。书中所言他人之事&#xff0c;更使我们如身临其境。无论何时何地&#xff0c;好书无须倾尽囊中物便可得之&#xff0c;而我们的呼吸也会充满书香之气…

【开源软件】最好的开源软件-2023-第16名 Hypertrace

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…