Nginx:OCSP 和客户端证书

Nginx:OCSP 和客户端证书

我有一个可以正常工作的 Nginx 设置,并配置了 OCSP 装订。现在我想为多个 URL 添加客户端证书身份验证。

因此,我添加了一个ssl_client_certificate声明,指向我们用于受限 URL 的 CA 证书(它是私有 CA 证书,未由任何公开的 CA 签名),并且因为大多数服务器仍然应该公开可用,所以我将其设置ssl_verify_clientoptional

这只起到了一半的作用:我可以使用 cURL(*) 运行请求,无论是否传递证书,都可以在公共 URL 和检查证书是否存在的受保护 URL 上接收预期的响应。

但现在我要问的是:当使用浏览器访问相同的 URL(未提供证书)时,Nginx 会响应错误 400。令我困惑的是,当我使用 Firefox 开发人员工具从任何失败的请求中创建 cURL 请求并从命令行运行它们时,它运行正常。可能是什么问题?

甚至 cURL-v--trace-ascii没有显示任何内容来向我解释为什么它会在浏览器中失败。我不会在这里粘贴整个(长)配置,如果您认为缺少一些基本的东西,请随时发表评论。

编辑:我检查并确认 cURL 发送、、、、、Host标头以及cookie 和会话 ID,并启用压缩,就像 Firefox 一样。User-AgentAcceptAccept-LanguageReferrerDNT

此外,Firefox 和 cURL 都没有任何可以提供给服务器的客户端证书,并且 Firefox 配置为要求提供证书而不是自动提供证书。

另一项修改:午饭回来后(在此期间没有配置更改),Firefox 可以加载第一页和相关资源一次。现在,几分钟后,只尝试了各种请求,即没有更改,它就不再起作用了。Chrome 也报告了错误 400,使用其开发人员工具中的“复制为 cURL”(再次包含所有标头)显示它在 cURL 中再次有效。我还多次尝试了所有请求,以确保对单个用户代理显示的行为没有不一致。我被难住了,这一切对我来说似乎都很随机。

相关内容