仅经 VPN 访问的站点该用什么证书:DNS-01 还是内部 CA?
仅经 VPN 访问的站点可以借助 DNS-01 取得受信任的公开证书,也可以使用内部 CA 签发的内部证书。如何取舍取决于域名和客户端。
仅经 VPN 访问的站点该怎样取得证书,取决于三个条件:你是否掌控一个公开 DNS 区、主机名能否出现在公开日志中、能否为每个客户端安装一个私有信任锚。公开路线和私有路线都能带来可用的绿锁,但它们回答的是不同的问题。不先厘清这些条件就挑一条,正是站点要么拿到并不想要的公开证书、要么拿到半数客户端都拒绝的内部证书的原因。
证书证明域名;VPN 和内部 DNS 提供通路。
通往可信域名的两条路线
采用 DNS-01 校验的公开签发机构,通过你掌控的区里的一条 TXT 记录来证明对该域名的控制,因此 Web 服务始终不必接受公开的 HTTP 连接。内部 CA 为内部域名签发叶子证书,并通过设备管理分发其信任锚,因此任何公开日志都不会知道该域名。两者都正当,取舍取决于那三个条件,而不是图省事。两条路线都不提供客户端所需的路径或解析记录。
公开证书还会把主机名写进证书透明度日志。若域名本身敏感,这项公开属于设计决策,而不是日后才发现的副作用。
在不暴露服务的前提下使用 DNS-01
质询记录是区内保留前缀下的一条 TXT 记录,签发机构从权威 DNS 读取它。请选择能够创建并删除该记录的 ACME 客户端与 DNS 集成,并把更新权限收紧:要么是限定在该区上的 API 凭据,要么是只用于校验的受控主机。为续期一张证书而给应用服务器一个不受限的注册商凭据,远超这项任务所需的权限。当多张订单共用同一个域名时,各自的 TXT 取值要彼此分开,免得清理其中一条时删掉另一条仍需要的值。
等待传播时,应针对权威服务器做检查,而不是固定睡一段时间。传播行为因服务商而异,今天管用的等待并不能证明明天也管用。
受管客户端与刻意私有的域名
受管设备与刻意私有的域名很适合内部 CA。通过设备管理分发可信签发机构,再为预定域名签发叶子证书。要确认每个客户端实际使用哪个存储,因为操作系统里导入一次并不等于对所有浏览器和应用都成立。叶子固定是明确受支持时的另一种选择,代价是叶子每次变动都要再做一次信任更新。
分发渠道与密钥同样重要:没人安装的根证书保护不了任何东西。
续期是设计的一部分
无论选哪条路线,续期都需要负责人和流程。刷新校验凭据、装上新材料、通过监听器自身支持的方式重新加载,这是三个独立步骤,而多数 ACME 客户端只自动化第一步。续期正确却从未被加载的证书,与过期证书造成同样的中断。
证书既不会装好 VPN 路由,也不会创建内部 DNS 记录。客户端仍需要一个把域名映射到私有地址的解析器,以及一条能到达该地址的路径。请从同时具备两者的客户端按域名访问站点来验证。
记录签发机构、校验方式、信任分发渠道和重载机制。这四项合起来就是续期方案。