Squid Web Cache Wiki

Squid Web Cache 文档

🔗 功能:SSL服务器证书验证器

🔗 动机

受DigiNotar CA 泄露事件的启发,各种Web代理现在都在努力验证SSL证书(请参阅2011年标题为“SSL Bump Certificate Blacklist”的squid-dev线程,以获得良好介绍)。从用户的角度来看,SSL嗅探(SSL bumping)的Squid是服务器证书验证的最终权威,因此我们也需要超越基本的OpenSSL检查。

各种协议和其他验证方法正在涌现:CRL、OCSP、SCVP、DNSSEC DANE、SSL Notaries等。目前还没有明显的赢家,所以我们处于通过试错进行本地实验的阶段。我们认真考虑过在Squid中实现上述方法之一,但似乎最好改为支持一个通用的验证助手(helper),以便管理员可以尝试不同的方法。

🔗 实现草图

将在我们现在进行的内部OpenSSL验证之后,可选地咨询该助手,无论该验证结果如何。助手将接收

如果助手决定接受OpenSSL错误或报告其他验证错误,助手将返回

返回的信息模仿了当前内部基于OpenSSL的验证代码收集的内容。任何返回的错误将被馈送到sslproxy_cert_error,触发现有的SSL错误处理代码。

助手响应将被缓存,以减轻验证性能负担(按验证查询参数索引)。

🔗 助手通信协议

此接口与SSL证书生成接口类似。

Squid接收的输入

request size [kv-pairs]

:warning: line 指的是一个逻辑输入。body 可能包含 \n 字符,因此此格式中的每一行都以 0x01 字节而不是标准的 \n 字节分隔。

示例请求

0 cert_validate 1519 host=dmz.example-domain.com
cert_0=-----BEGIN CERTIFICATE-----
MIID+DCCA2GgAwIBAgIJAIDcHRUxB2O4MA0GCSqGSIb3DQEBBAUAMIGvMQswCQYD
...
YpVJGt5CJuNfCcB/
-----END CERTIFICATE-----
error_name_0=X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
error_cert_0=cert0

返回给 Squid 的结果行

result size kv-pairs

示例响应消息

ERR 1444 cert_10=-----BEGIN CERTIFICATE-----
MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
...
398znM/jra6O1I7mT1GvFpLgXPYHDw==
-----END CERTIFICATE-----
error_name_0=X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
error_reason_0=Checked by Cert Validator
error_cert_0=cert_10

🔗 设计决策点

为什么应该在OpenSSL验证之后咨询助手?这允许助手使用并可能调整OpenSSL检测到的错误。我们可以添加一个squid.conf选项来控制咨询顺序,但我们找不到一个好的用例来证明其开销是合理的。

为什么即使OpenSSL已经声明证书无效也应该咨询助手?OpenSSL可能出错。例如,它的CRL可能过时或配置不正确。我们可以添加一个squid.conf选项来控制在OpenSSL检测到错误后是否咨询助手,但由于这类错误应该很少见,该选项很可能在罕见的错误情况下不会带来任何功能优势,反而会增加常见情况的开销。

类别:功能

导航:站点搜索站点页面类别🔼 向上