自动化HTTPS部署
Caddy会自动的帮你部署HTTPS:
- 地址为空,不是localhost或者ip地址
- 端口不是80
- 没有指定http协议
- 没有在网站配置中关闭TLS
- 证书和密钥不是由你提供
- Caddy能够绑定到80和443端口(除非你用的是DNS)
如果没有明确在Caddyfile中定义,Caddy会将所有HTTP请求跳转到HTTPS上。
所有操作都是自动化的,包括续签——不需要你操作。这里有个28秒的视频介绍(youtube)。
需要知道的事/FAQ
为了充分使用这个功能,请阅读以下内容。
绑定80和443端口是必要的
这通常需要管理员权限。在Linux系统中,你可以给予Caddy绑定80和443端口的权限,而不需要使用setcap,类似setcap cap_net_bind_service=+ep caddy
。不要忘记设置防火墙允许Caddy使用的端口!除非你使用了DNS,Caddy在这些端口上获取证书。
.caddy文件夹
Caddy将会在你的主目录下创建一个名为.caddy
的文件夹。这个文件夹存储了你网站的一些密码文件。你网站的证书和私有密钥存储在这里,请注意保护好这个文件夹。
如果这个主文件夹,Caddy会在当前文件夹中创建,除非已经设置了$CADDYPATH
。主文件夹的路径参考环境变量($HOME
或%HOMEPATH%
)
测试,试验和高级设置
为了测试你的Caddy的配置,请确保你已经使用-ca改变了开发URL,否则你可能会被限制使用HTTPS长达一个星期。尤其常见于当使用控制面板或容器的时候。Caddy默认使用的是Let's Encrypt。
支持负载均衡和代理
如果使用了其他的基建,Caddy可能很难验证域名和获得证书。这是你将要处理的,请确保SLL证书能够正确的设置和解析到所有的设备上。在大多说情况下,你可以使用DNS(下文将有介绍)来获取证书,但是这些必须由你手动设置。
透明度报告
当Caddy从CA获得获得一个证书的时候,会发送一份透明度日志,它将包含你的域名或者ip地址,因为它们并不视作一些隐私信息(Let's Encrypt是其中一个CA)。这是一件好事,这份报告酱油CA负责保存。
DNS
有三种类型能使Caddy获取证书。其中两个类型Caddy不需要配置就能使用,但是另外一种类型——DNS——需要配置当其他类型失败的时候,这将被使用。Caddy支持一些DNS提供商。
为了使用DNS,你必须做以下三件事。
- 下载插件
- 在Caddyfile中配置哪个dns服务商提供的。
- 给予Caddy访问你账户的权限
这些由环境变量完成。
允许使用DNS
在你的Caddyfile中,你将用tls指令来指定dns
tls {
dns 提供商
}
请将提供商转换为你使用的dns服务商(参考下表)。需要你在环境变量中设置你的账户明细。
提供商 | 设置的服务名 |
---|---|
cloudflare | CLOUDFLARE_EMAIL CLOUDFLARE_API_KEY |
digitalocean | DO_AUTH_TOKEN |
dnsimple | DNSIMPLE_EMAIL DNSIMPLE_API_KEY |
dyn | DYN_CUSTOMER_NAME DYN_USER_NAME DYN_PASSWORD |
gandi | GANDI_API_KEY |
googlecloud | GCE_PROJECT |
linode | LINODE_API_KEY |
namecheap | NAMECHEAP_API_USER NAMECHEAP_API_KEY |
ovh | OVH_ENDPOINT OVH_APPLICATION_KEY OVH_APPLICATION_SECRET OVH_CONSUMER_KEY |
rfc2136 | RFC2136_NAMESERVER RFC2136_TSIG_ALGORITHM RFC2136_TSIG_KEY RFC2136_TSIG_SECRET |
route53 | AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY |
vultr | VULTR_API_KEY |
当你使用DNS的时候,Caddy将会使用这个配置。请注意,某些提供商可能会有些许延迟。
即时的TLS
Caddy使用一种新的TLS技术。这意味着当你第一次访问网站的时候,tls可能并未生成证书。
为了启用即时的tls
,请使用max_crets
指令。例如:
*.example.com
proxy / localhost:4001 localhost:4002
tls {
max_certs 10
}
在首先的10条不同的访问中,Caddyfile将会在后台代理所有到example.com
子域名的请求,这意味着你可以动态的使用DNS记录,它们也将使用HTTPS.与通配符证书一样,这不仅限于子域名。
减少滥用:这个特性是必要的。tls的指令集max_certs限制了获取证书的数量,这能限制攻击者在短时间内生成大量证书来撑满服务器磁盘。
即时TLS是一种特殊的TLS管理方式,所以除了不会提供证书其他的需求仍然适用。你可以使用你自己的证书像常规管理TLS,HTTP将被重定向到HTTPS。
支持计划:这个特性依赖于CA签发的证书。如果在发行时在CA变得不通用了,Caddy将会停止这个特性的使用
一旦启用这个新特新,它会像其他证书一样会在硬盘中存储证书也会在内存中检索以便更快的链接。
即时的TLS受到这些的速度限制:
- 同一时间多个证书申请
- 在10个证书成功申请后,新证书将在十分钟后继续申请。
- 失败后五分钟内不被允许再次申请
请注意,将在退出时重置这个限制。建议你使用-log
来记录。
测试你的配置:Caddy使用Let's Encrypt默认证书申请,它有个分段端点并且不受速度限制。
这个页面其余部分解释了更多的关于自动化部署HTTPS的细节,但这并不是使用Caddy所必须的知识。
获取证书
要想为站点提供HTTPS服务,需要使用来自受信任的证书颁发机构(CA)所颁布的有效SSL证书。当Caddy启动的时候,它会自动从Let's Encrypt获取证书。这些操作几乎都是全自动的,默认启用。
如果需要,Caddy将会在CA的服务器上使用(或不使用)你的邮箱创建一个账户。如果Caddy在Caddyfile,在命令行标识或者上次运行的磁盘中找到一个邮箱,这可能会提示你输入你的邮箱地址。此外,如果CA的法律协议已经被修改并且你没有使用-agree
标识,那么可能会提示你同意这些协议。
一旦开始处理,Caddy将会为每个站点生成私钥和证书签名请求(CSR)。私钥将会安全的存储在你的服务器上。
Caddy将于CA服务器建立链接。一个简单的加密证明Caddy正在运行一个网站。一旦CA服务器验证了,它将直接把证书发送给Caddy,证书文件将会存储在.caddy
文件夹中。
这个过程通常会需要几秒钟的时间,所以当这个站点获取证书后,就会从磁盘加载证书,并在下次运行Caddy的时候重新使用。换句话说,这种延迟是一次性的,如果你需要更新的证书,Caddy将会立即更新。
续订证书
证书只在有效期内有效,因此,Caddy将定期检查每个证书并且自动更新即将到期的证书。如果续订失败了,Caddy将继续尝试续订。
一旦Caddy续订了新的证书,他将替换掉旧的证书。这是在线热替换。
撤销证书
Caddy不会自动的撤销证书,但是你可以使用-revoke
来指定域名执行这项操作。只有在你网站的私钥或者证书颁发机构出现问题是才需要执行这项操作。撤销后,Caddy会从磁盘删除证书文件,以防下次运行使用它。
OCSP Stapling
Caddy包含OSCP链接的所有证书信息,以保护你网站的安全,减少OCSP服务器上的压力。定期检查缓存的OCSP状态,如果过有更改,服务器将会重新请求一个新的响应。当获得一个新的响应后,Caddy将会在磁盘上保存状态以便能够在长时间OCSP响应中断中正常运行。与证书类似,OCSP将会保留在.caddy文件夹中。