
我使用 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;
...
}
}
}
謝謝!