Nginx 客户端证书验证:ssl_client_certificate 与 ssl_trusted_certificate

Nginx 客户端证书验证:ssl_client_certificate 与 ssl_trusted_certificate

文档ssl_client_certificate说:

指定一个包含 PEM 格式的受信任 CA 证书的文件,用于验证客户端证书和 OCSP 响应(如果ssl_stapling已启用。

证书列表将发送给客户。如果不希望如此,ssl_trusted_certificate可以使用指令。

为什么要将此列表发送给客户端?我以为客户端验证过程会让客户端将其证书(和中间文件)发送到服务器进行验证。如果此属性指向的文件很大,这样做效率会不会很低?

另一方面,它说ssl_trusted_certificate如果您不想将证书发送给客户端,则使用。如果我删除ssl_client_certificate并仅设置ssl_trusted_certificate,则 nginx 不会启动,因为我有ssl_verify_client on;

答案1

作为 TLS 握手的一部分,服务器将(如果配置为需要通过 X.509 证书进行客户端身份验证)向客户端发送证书请求。此请求的一部分是服务器信任的 CA 证书列表。客户端应发送链接到此列表中的其中一个 CA 证书的客户端身份验证证书。

如果您仔细想想,如果服务器无法验证证书,客户端发送证书是毫无意义的,因此服务器发送其信任的 CA 证书列表是有意义的。如果服务器不信任证书,客户端向服务器发送证书将效率低下。对于拥有许多证书的客户端来说尤其如此 - 它必须发送所有证书,希望其中一个证书受到服务器信任。

nginx从指向的证书文件生成此列表ssl_client_certificate。您需要发送此列表或关闭ssl_verify_client

另请注意ssl_trusted_certificate将验证客户端证书,但此指令指向的文件中证书不会作为 TLS 握手的一部分发送给客户端。相反,这些 CA 证书可用于在配置 OCSP 装订时验证 OCSP 响应。

您可以在RFC 5246,第 7.4.4 节您可以在那里阅读有关 TLS 握手的所有其他详细信息。

相关内容