CertMagic是什么?¶
CertMagic是用于Go的ACME客户端集成。
ACME的全称是Automated Certificate Management Environment,见文知意。
简单的说,使用CertMagic就能直接让你的Web Service自动实现HTTP到HTTPS的转换。
CertMagic的功能特性¶
按照官方文档的说明
Features
- 全自动证书管理,包括发布和续签
- 仅需一行,完全管理HTTPS服务器
- 完全控制几乎系统的各个方面
- HTTP到HTTPS的跳转(301 302)
- 解决了ACME的所有三个提走含:HTTP,TLS-ALPN和DNS
- 几乎解决了所有ACME客户端的鲁棒性错误处理
- 随机化以避免意外依赖的挑战
- 旋转以克服某些网络阻塞
- 强大的重试长达30天
- 仔细调谐的间隔的指数回退
- 重试使用可选的 测试/staging CA 端点而不是生产,以避免速率限制
- 底层由ACMEz这个主流ACME客户端驱动支持, the premier ACME client library for Go
- 所有libdns DNS 提供者开箱即用
- 插件化的存储实现(缺省:文件系统)
- 通配符证书
- 自动 OCSP 装订 (完成) 保持你的网站持续在线!
- 所有挑战的分布式解决(工作在负载均衡之后)
- 高效,协调的管理
- 激活锁定
- 智能查询
- 支持“按需”颁发证书 (TLS 握手的时候!)
- Caddy / CertMagic 开创了这个技术
- 定制决策功能可调节和限制按需行为
- 可选的用于监视的事件钩子
- 与任何证书颁发机构(CA)的符合ACME规范的证书一起使用
- 证书撤销 (只有当私钥被泄露的时候才需要)
- Must-Staple (optional; not default)
- 跨平台支持!Mac Windows Linux BSD Android…
- 每个实例可以扩展成千上万的证书
- 与你自己的证书一起使用
要能正常使用以上功能,需要先满足一下要求
- 你控制着公共DNS name
- 服务可公网访问
- 或使用DNS来避免此要求
- 控制80(HTTP)和/或 443(HTTPS)端口
- 或能转向你能控制的端口
- 或使用DNS来避免这个需求
- (这是 ACME 协议的需求, 不是库的限制)
- 持久存储
- 一般是本地文件系统(缺省)
- 其他可用的集成
- 在使用此库之前,你的永明必须将A/AAAA记录只想你的服务器(除非你使用了自有DNS)
CertMagic的外部依赖库¶
CertMagic在Golang标准库之外使用的外部依赖库
require (
github.com/klauspost/cpuid v1.2.5
github.com/libdns/libdns v0.1.0
github.com/mholt/acmez v0.1.1
github.com/miekg/dns v1.1.30
go.uber.org/zap v1.15.0
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de
)
其中
- cpuid:提供有关运行当前程序的CPU的信息
- libdns:DNS 提供者客户端集合
- acmez: RFC 8555(ACME)的完全兼容实现
- dns: DNS库
- zap:日志处理
- crypto:加密相关功能
代码库文件目录¶
排除说明性文件,版本控制文件,go mod文件和测试文件之后:
account.go acmeclient.go acmemanager.go async.go cache.go certificates.go certmagic.go config.go crypto.go dnsutil.go filestorage.go handshake.go httphandler.go maintain.go ocsp.go ratelimiter.go solvers.go storage.go