我正在使用 nginx 作为反向代理来处理使用 HTTP 的应用程序的 HTTPS。到目前为止,这运行良好,但现在我需要能够限制我从上游服务器接受的证书类型。除了常规的验证检查外,我还需要能够拒绝任何具有名称限制或策略映射的证书,以及在某些扩展被标记为关键时拒绝证书。
在 openssl 中,我相信这可以verify_callback
通过SSL_CTX_set_verify通过获取 x509 扩展并检查是否存在/关键内容。
是否有可能:
a) 在 nginx 配置中设置此类证书扩展限制?ngx_http_ssl_模块有一个ssl_conf_command
指令用于将一些配置选项传递给 openssl,但我不确定这是否与反向代理相关,或者它是否能够进行“自定义”证书验证。
或者
b) 编写一个自定义模块,可以对从上游收到的证书执行额外的验证,如果验证失败则断开连接?我不太熟悉模块的工作原理,所以如果这是一个潜在的解决方案,任何建议都将不胜感激。
或者
c) 修改 openssl 配置文件来实现这一点?也许可以在 openssl 级别设置这些限制,而根本不需要对 nginx 进行任何更改。
我的配置文件的相关部分如下所示:
http {
keepalive_timeout 65;
access_log nginx_access.log;
server {
listen 12312;
location / {
...
proxy_pass https://<ip_address_of_upstream_server>;
proxy_redirect https://<<ip_address_of_upstream_server>> http://localhost:12312;
proxy_ssl_certificate certs/client-cert.pem;
proxy_ssl_certificate_key certs/client-key.pem;
proxy_ssl_trusted_certificate certs/root.pem;
proxy_ssl_verify on;
...
}
}
}
谢谢!