ssl - 配置 Nginx 将客户端证书转发到后端

标签 ssl nginx https certificate x509

我为双向 ssl 配置了一个 spring boot 服务,以使用证书验证客户端。它在 nginx 代理服务器后面。因此要求配置 nginx 以提供来自客户端的透明 https 连接并将客户端证书转发到要验证的 web 服务(后端)。还可以为不需要客户端身份验证的其他服务配置一种方式的 ssl。

类似于:

  1. |客户| -->httpS + 客户端证书--->|NGINX|--->httpS + 客户端证书--->|服务1|

  2. |客户| ---------->httpS------------>|NGINX| ---------->http------------>|服务2|

我的 nginx 配置:

server {
    listen       443;
    server_name  xx.xx.xx.xxx;

     ssl on;
     ssl_certificate      /path/to/server/cert.crt;
     ssl_certificate_key  /path/to/server/key.key;
     ssl_client_certificate /path/to/ca.crt;
     ssl_verify_client optional;

     location /service1/ {
         proxy_pass https://service1:80/;   
         #Config to forward client certificate or to forward ssl connection(handshake) to service1
     }

     location /service2/ {
         proxy_pass http://service2:80/;
         #http connection
     }
}

另外,有没有办法从证书中获取通用名称来验证客户端并在 nginx 中做出决定?因为使用 CA 是不够的。

谢谢..

最佳答案

这是不可能的。您试图做的是使 nginx 代理成为“中间人”,而 TLS 在设计上不允许这样做。

关于ssl - 配置 Nginx 将客户端证书转发到后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42252038/

相关文章:

Facebook 使用 http 协议(protocol)打开我的应用程序,尽管在应用程序设置中配置了 https

.net - 如何将 'ServerCertificateValidationCallback' 属性设置回其默认行为?

没有 SSL 的 Facebook 登录

ruby-on-rails - ubuntu 服务器(nginx+passenger+capistrano)上的 Rails 应用程序日志在哪里?

redirect - 拦截后端 301/302 重定向 (proxy_pass) 并可能重写到另一个位置 block ?

javascript - Angular View 和 html 可以使用 HTTP,而 JSON RestAPI 调用可以使用 HTTPS 吗?

http - 将非 www 重定向到 https 时出错

ruby-on-rails - 引发 HTTP 请求时 Rails 中的 OpenSSL::SSL::SSLError

encryption - 如何在HTTPS协议(protocol)栈中加入自定义加密算法?

ubuntu - 从nginx中的url中提取第一个点之前的单词