我正在努力将 Nginx 设置为具有客户端证书身份验证的反向代理。客户端仅接受将公开签名的证书作为客户端证书导入以进行身份验证。
在 Nginx 端,我可以设置用于签署客户端证书(例如 Let's encrypt)证书的公共可用 CA,并使用以下设置(正如许多解决方案所建议的那样):
ssl_client_certificate /etc/nginx/ssl/ca.cer;
ssl_verify_client on;
我现在质疑这种设置的安全性,并想知道:
任何使用由公共 CA 签名的有效客户端证书的客户端现在都可以连接到 Nginx 服务器并进行身份验证吗?
如果上述答案是肯定的,那么我如何才能仅允许我的客户端证书成功通过身份验证并禁止其他证书?我是否需要指定自己的 CA(这将使此设置变得无用,因为客户端仅允许导入公共 CA 签名的客户端证书)。
感谢您的帮助。
答案1
对于客户端证书,您应该使用私有 CA,但 Amazon AWS 也提供私有 CA。 https://aws.amazon.com/private-ca/
要使 nginx 使用客户端证书身份验证,您需要使用这些指令
server {
listen 443 ssl;
server_name your_domain.com;
ssl_certificate /path/to/server.crt;
ssl_certificate_key /path/to/server.key;
ssl_client_certificate /path/to/ca.crt;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305; ssl_prefer_server_ciphers off;
ssl_verify_client on;
}
您需要创建一个私有 CA 并颁发客户端证书。在您的 Nginx 配置文件中,指定服务器证书、私钥和 CA 证书(您的私有 CA 的公共部分)的路径。我还添加了一些选项来保护它