我感兴趣的关于TCP上游SSL终止的特性。 我正在评估NGINX开源和NGINX Plus。
我们有一个应用程序接受来自客户端的TLS消息(TCP)。 用NGINX,我想在NGINX终止TLS,然后NGINX会把解密后的数据包转发给应用程序。 请注意我的应用程序不会通过HTTP接收消息,而是通过TCP(因此HTTP(S)相关模块对我的用例无效)。
客户端 – (TLS) – > NGINX – (解密) – >应用程序
我已经configurationNGINX进行TCP负载均衡(Non-SSL)。 为此,我必须使用以下两个模块构build源代码:
现在,我想在NGINX和客户端之间启用SSL的相互authentication。 我看到这个文档谈到服务器端身份validation(客户端validation服务器的证书),但我无法findconfiguration相互身份validation(客户端和服务器都validation对方的证书)的步骤。 你能帮我吗? 在“ngx_stream_ssl_module”中我找不到任何提及客户端证书的选项。
以下是我的nginx.conf的内容:
stream { server { listen *:5222 ssl; proxy_pass backend; ssl_certificate /usr/local/nginx/certs/server.crt; ssl_certificate_key /usr/local/nginx/certs/server.key; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ssl_session_cache shared:SSL:20m; ssl_session_timeout 4h; ssl_handshake_timeout 30s; } upstream backend { server 0.0.0.0:5223; } }
另外我想只有当客户端有一个特定的身份(可能基于客户端的标识符/唯一名称)才允许(SSL握手)。 有没有办法使用NGINX或NGINX Plus做到这一点?
任何其他build议将不胜感激。
看起来像模块ngx_stream_ssl_module不支持这些指令ssl_client_certificate , ssl_verify_client
stream { server { listen *:5222 ssl; proxy_pass backend; ssl_certificate /usr/local/nginx/certs/server.crt; # Can Include the Chain ssl_certificate_key /usr/local/nginx/certs/server.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Removed SSLv3 ssl_ciphers HIGH:!aNULL:!MD5; ssl_session_cache shared:SSL:20m; ssl_session_timeout 4h; ssl_handshake_timeout 30s; ssl_client_certificate /usr/local/nginx/certs/ca.chain.cert.pem; ssl_verify_client on; ssl_verify_depth 2; } upstream backend { server 0.0.0.0:5223; } }
server { listen 80; server_name www.example.com; ... location /upstream { proxy_pass https://backend.example.com; proxy_ssl_certificate /etc/nginx/client.pem; proxy_ssl_certificate_key /etc/nginx/client.key proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2; proxy_ssl_ciphers HIGH:!aNULL:!MD5; proxy_ssl_trusted_certificate /etc/nginx/trusted_ca_cert.crt; proxy_ssl_verify on; proxy_ssl_verify_depth 2; proxy_ssl_session_reuse on; } }
如果使用自签名证书,则应包含CA文件: proxy_ssl_trusted_certificate 。