当前位置:网站首页>Let‘s Encrypt 使用
Let‘s Encrypt 使用
2022-08-03 09:08:00 【Blue summer】
1 关于Let’s Encrypt
Let’s Encrypt是一个非盈利的自动证书颁发机构(CA),我们可以免费的从Let’s Encrypt获取自己网站域名的证书,只需要在我们的web主机上运行使用ACME协议的软件来获取Let’s Encrypt证书。
2 工作原理
证书颁发主要分为两步,第一步就是域名认证,证明客户端对这个域名有控制权,不然谁都可以更改你的证书,那就乱套了。然后客户端就可以进行申请、续期以及吊销证书。
其中域名认证有两种方式:
- 在你的域名下的已知URI下放置一个HTTP资源
- 在你的域名下配置DNS记录
3 域名认证方式
3.1 HTTP-01 验证
Let’s Encrypt向ACME客户端提供一个令牌,ACME客户端需要在指定路径http://<your_domain>/.well-known/acme-challenge/<TOKEN>上放置指定文件。该文件包含令牌以及帐户密钥的指纹,文件准备就绪后Let’s Encrypt会尝试获取它,获取成功则验证被视为成功,就可以继续申请颁发证书。
HTTP-01验证最多接受10次重定向,只接受目标为“http:”或“https:”且端口为 80 或 443 的重定向。不接受目标为IP地址的重定向。 当被重定向到 HTTPS 链接时,不会验证证书是否有效(因为验证的目的是申请有效证书,所以它可能会遇到自签名或过期的证书)。
优点:
容易自动化,不需要关于域名配置的额外知识
支持为CNAME的域名颁发证书
适用于现成的Web服务器
缺点:
该验证方式依赖80端口
此验证方式不支持颁发通配符证书
域名下有多个Web服务器时,必须确保该文件在所有服务器上都存在
3.2 DNS-01 验证
此验证方式要求客户端在该域名下的 TXT 记录中设定特定值来证明你对该域名DNS系统的控制。Let’s Encrypt为ACME客户端提供令牌后,客户端根据令牌和帐户密钥创建TXT记录,并将该记录应用在 _acme-challenge.<YOUR_DOMAIN> 。 然后Let’s Encrypt就会向DNS系统查询该记录,如果查询到匹配项,则表示验证成功。
此时只有在DNS提供商有自动更新的API时,这种DNS-01验证方式才有意义,比如使用云厂商的DNS服务,route53。
因为要将DNS API凭据放在Web服务器上,因此会增加该服务器被黑客攻击的风险。最好是使用权限范围受限的API凭据,或在单独的服务器上执行DNS验证并自动将证书复制到Web服务器上。
优点:
此验证方式支持颁发通配符证书
有多个Web服务器时不需要其他额外配
缺点:
在Web服务器上保留API凭据存在一定风险
要求DNS提供商能自动更新DNS记录
DNS提供商可能无法保证DNS记录更新时间
4 注意事项
4.1 证书有效期
通过Let’s Encrypt申请的证书有效期是90天,因此最好是通过自动化方式对证书续期。
4.2 速率限制
证书的申请有速率限制,可以先在测试环境测试后再切到生产环境,
测试环境:https://acme-staging-v02.api.letsencrypt.org/directory
每个注册域名允许颁发的证书数量限制为每周 30000 张。 重复证书限制为每周 30000 张。 每账号、每主机名、每小时允许 60 次验证失败。 每个 IP 地址注册账户数量限制为每个 IP 每 3 小时允许注册 50 个账户。 对于 ACME v2,新订单限制为每个帐户每 3 小时 1500 个。
生产环境:https://acme-v02.api.letsencrypt.org/directory
每个注册域名允许颁发的证书数量限制为每周 50 张。 重复证书限制为每周 5 张。 每账号、每主机名、每小时允许 5 次验证失败。 每个 IP 地址注册账户数量限制为每个 IP 每 3 小时允许注册 10 个账户。 对于 ACME v2,新订单限制为每个帐户每 3 小时 300 个。
参考文档:
- https://letsencrypt.org/how-it-works/
- https://letsencrypt.org/docs/challenge-types/
- https://letsencrypt.org/docs/rate-limits/
边栏推荐
猜你喜欢
MySQL-存储过程-函数-
110 MySQL interview questions and answers (continuous updates)
Flink Yarn Per Job - 提交应用
When deleting a folder, the error "Error ox80070091: The directory is not empty" is reported. How to solve it?
Index (3)
【论文笔记】基于动作空间划分的MAXQ自动分层方法
BOM系列之localStorage
AD环境搭建
【论文笔记】一种基于启发式奖赏函数的分层强化学习方法
深度学习之 10 卷积神经网络1
随机推荐
"Easy to use" websites that others don't know, make you more efficient
dflow部署简记
验证浮点数输入
删除文件夹时,报错“错误ox80070091:目录不是空的”,该如何解决?
bihash总结
国内IT市场还有发展吗?有哪些创新好用的IT运维工具可以推荐?
【LeetCode】226. Flip the binary tree
The display of the article list and the basics of creating articles and article details
【LeetCode】老虎证券面试-括号嵌套且满足优先级
Automated test browser driver download version
箭头函数与普通函数的区别
判断根节点是否等于子节点之和
C# 一周入门高级编程之《C#-接口》Day Two
Guava-字符串工具
Unity关于编辑器扩展自定义标签,方便扩展Inspector
AcWing 3391. 今年的第几天?(简单题)
STP普通生成树安全特性— bpduguard特性 + bpdufilter特性 + guard root 特性 III loopguard技术( 详解+配置)
深度学习之 10 卷积神经网络2
多线程下的单例模式
LINGO 18.0软件安装包下载及安装教程