使用 nginx 代理 HTTP 时对证书扩展进行限制

使用 nginx 代理 HTTP 时对证书扩展进行限制

我正在使用 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;
      ...
    }
  }
}

谢谢!

相关内容