首页
视频
资源
登录
原
免费证书管理
5879
人阅读
2023/1/2 16:51
总访问:
2993352
评论:
0
收藏:
0
手机
分类:
容器编排
![](https://img.tnblog.net/arcimg/hb/72372a8f14ec4115b938263315581bc4.png) ![](https://img.tnblog.net/arcimg/hb/ecc67cacf8564e269e65b74eea5626b2.png) ># 免费证书管理 [TOC] ## 什么是CA? tn2>Certification Authority 简称 CA,它是证书的认证权威机构。它的体系是一个树形结构,每一个 CA 可以有一到多个子 CA ,顶层 CA 被称为根 CA 。除了根 CA 以外,其他的 CA 证书的颁发者是它的上一级 CA 。这种层级关系组成了信任链(Trust Chain)。 ![](https://img.tnblog.net/arcimg/hb/99907105460349e1818942401538b204.png) tn2>比如我们的tnblog.net网站,可以看到有三层,第一层根证书就是`Digicert Global Root CA`,然后是中间证书`Encryption Everywhere DV TLS CA - G1`,最后才是我们的网站`user.tnblog.net`证书。 ![](https://img.tnblog.net/arcimg/hb/8614ef3fbe674f99a67d6ce45de6d230.png) tn2>一般浏览器的信任的CA证书都是要钱的,那么有没有不要钱的CA证书机构呢?当然有,我们今天要讲的Let’s Encrypt就是一家免费的证书机构的组织。 ## Let’s Encrypt 简介 tn2>为了在您的网站上启用 HTTPS,您需要从证书颁发机构(CA)获取证书(一种文件)。 Let’s Encrypt 正是其中一家证书颁发机构。 要从 Let’s Encrypt 获取您网站域名的证书,您必须证明您对域名的实际控制权。 这一过程通常由 Web 主机上运行的 ACME 协议客户端完成。 ## Certbot ACME 客户端 tn2>它可以在不下线您的服务器的前提下自动执行证书颁发、安装以及更新服务证书。 ## Let’s Encrypt 工作原理 tn2>我们以`aidasi.top`域名举例。 该流程分为两步: 首先,ACME管理软件向证书颁发机构证明该服务器拥有域名的控制权。 之后,该管理软件就可以申请、续期或吊销该域名的证书。 ### 域名认证 tn2>Let’s Encrypt 通过公钥识别服务器管理员。 证书管理软件首次与 Let’s Encrypt 交互时,会生成新的密钥对,并向 Let’s Encrypt CA 证明服务器控制着一个或多个域名。 ![](https://img.tnblog.net/arcimg/hb/64f7d60167d74d62b761786f6e555b5d.png) tn2>证明的方式有三种: 1.配置DNS记录域名指定到IP中。 2.在`https://aidasi.top/`的已知?URI?下放置一个?HTTP?资源 2.1.申请一次性的数字认证(nonce),算是在第二种上进行的一种验证方式。 >#### 细节 ![](https://img.tnblog.net/arcimg/hb/0c3484ec7e1a46808d8174970d8721eb.png) tn2>然后被公钥标识的代理被授权为域aidasi.top管理证书。我们称代理使用的密钥对 为域aidasi.top的已授权密钥对。 ### 证书发放与撤销 tn2>一旦代理有了已授权秘钥对,请求,更新,撤销证书就很简单了,只需要发送证书管理消息,并用授权秘钥对他们签名就可以了。 >#### 什么是CSR? tn2>CSR 即证书签名申请(Certificate Signing Request),获取 SSL 证书,需要先生成 CSR 文件并提交给证书颁发机构(CA也是这里的Let’s Encrypt)。 CSR 包含了用于签发证书的公钥、用于辨识的名称信息(Distinguished Name)(例如域名)、真实性和完整性保护(例如数字签名),通常从 Web 服务器生成 CSR,同时创建加解密的公钥私钥对。 <br/> 在创建 CSR 过程中,需要提供相关组织机构信息,web 服务器会根据提供的信息创建证书的标识名称,用来识别证书,内容如下:国家或地区代码、省或市或自治区、城市或地区、组织机构、组织机构单位、通用名称 >#### 证书的发放 tn2>为了获取域证书,代理构建一个PKCS#10证书签名请求(CSR)给CA,请求CA使用指定的公钥来发放域`aidasi.top`证书。通常,CSR中包含了由一个在CSR中的公钥关联的私钥加密的签名。代理会用域`aidasi.top`的已授权秘钥为整个CSR签名,以便让CA知道自己是被授权的。 当CA接收到请求,会验证两个签名。如果两个签名都是正常的,CA会为域`aidasi.top`发放证书以及CSR中的公钥,一并返回给代理。 ![](https://img.tnblog.net/arcimg/hb/6e8ababb17144aa0ac690448568b5831.png) tn>LE使用ACME协议来完成域认证和证书发放,客户端代理必须使用ACME协议与LE通信。 >#### 证书的撤销 tn2>申请吊销证书的流程类似。 证书管理软件使用 `aidasi.top` 的授权私钥签署一个吊销请求,Let’s Encrypt CA 将验证该请求是否已被授权。 如果已授权,则将吊销信息发布到正常的吊销通道(即 OCSP)中,以便浏览器等依赖方知道他们不应该接受这个已被吊销的证书。 ![](https://img.tnblog.net/arcimg/hb/092af2afc8ba4ba0958bf2fb8c4e00f6.png) ## 实践 tn2>首先我们需要先准备一台线上的服务器。 然后将我们的域名`aidasi.top`指向该服务器地址,我这里使用的是腾讯云的域名。 ![](https://img.tnblog.net/arcimg/hb/bb6698de37054a38b7c614f31e5c4252.png) ### 生成certbot容器 tn2>这里我们编写certbot容器的dockerfile。 ```bash mkdir /bob/certbot/certs -p cd /bob/certbot vim dockerfile ``` tn2>里面就做了安装certbot操作。 ```bash FROM debian:buster RUN apt-get update -y && apt-get install -y certbot ``` tn2>执行如下命令进行生成容器镜像。当生成完成后,运行并共享当前的目录以及当前目录下的`/certs`目录,映射到`/etc/letsencrypt`目录下。 ```bash # 生成 docker build . -t certbot # 运行certbot容器 docker run -it --rm --name certbot \ -v ${PWD}:/letsencrypt \ -v ${PWD}/certs:/etc/letsencrypt \ certbot bash ``` ![](https://img.tnblog.net/arcimg/hb/ad0ce90ae6924ebcbbab685b6fc57159.png) tn2>由于我们在进行证书认证的时候,需要域名进行生成一些文件信息到`/.well-known/acme-challenge/`连接下进行CA验证,所以我们打开一个新的命令窗口运行一个nginx并将访问`/.well-known/acme-challenge/`的连接共享`/letsencrypt/`目录。 ```bash cd /bob/certbot vim nginx.conf ``` ```bash user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; server { listen 80; location /.well-known/acme-challenge/ { root /letsencrypt/; } location / { gzip off; root /usr/share/nginx/html/; index index.html; } } } ``` ```bash docker run -d --name nginx \ -v ${PWD}/nginx.conf:/etc/nginx/nginx.conf \ -v ${PWD}:/letsencrypt \ -v ${PWD}/certs:/etc/letsencrypt \ -p 80:80 \ -p 443:443 \ nginx ``` tn2>然后我们在certbot中执行生成证书相关的命令。 ```bash # 向Let’s Encrypt请求生成的相关证书 certbot certonly --webroot # 输入邮箱 86382516@qq.com # 是否同意条款 A # 不通知到邮箱 N # 写入我们的域名 aidasi.top # 将相关证书文件输出到/letsencrypt文件夹下 /letsencrypt ``` tn2>然后我们可以进行更改nginx的配置,将我们的ca文件配置到nginx中。 ```bash cd /bob/certbot vim nginx.conf ``` ```bash user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; server { listen 80; location /.well-known/acme-challenge/ { root /letsencrypt/; } location / { gzip off; root /usr/share/nginx/html/; index index.html; } } server { listen 443 ssl default_server; listen [::]:443 ssl default_server ; server_name aidasi.top; ssl_certificate /etc/letsencrypt/live/aidasi.top/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/aidasi.top/privkey.pem; root /usr/share/nginx/html/; location / { gzip off; root /usr/share/nginx/html/; index index.html; } } } ``` tn2>更新配置 ```bash docker exec -it nginx sh -c "nginx -s reload" ``` tn2>再次访问我们的域名`https://aidasi.top/`发现没什么问题了。 ### 自动更新 ```bash certbot renew --dry-run ``` ```bash docker exec -it nginx sh -c "nginx -s reload" ``` ### 撤销 ```bash certbot revoke --cert-name aidasi.top certbot revoke --cert-path /etc/letsencrypt/live/aidasi.top/cert.pem ```
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
尘叶心繁
这一世以无限游戏为使命!
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net后台框架
178篇
linux
18篇
linux中cve
1篇
windows中cve
0篇
资源分享
10篇
Win32
3篇
前端
28篇
传说中的c
5篇
Xamarin
9篇
docker
15篇
容器编排
101篇
grpc
4篇
Go
15篇
yaml模板
1篇
理论
2篇
更多
Sqlserver
4篇
云产品
39篇
git
3篇
Unity
1篇
考证
2篇
RabbitMq
23篇
Harbor
1篇
Ansible
8篇
Jenkins
17篇
Vue
1篇
Ids4
18篇
istio
1篇
架构
2篇
网络
7篇
windbg
4篇
AI
19篇
threejs
2篇
人物
1篇
嵌入式
20篇
python
20篇
HuggingFace
8篇
pytorch
10篇
opencv
6篇
Halcon
5篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术