O recurso especial que me interessa sobre terminação SSL para o TCP Upstream. Estou avaliando tanto o NGINX Open Source quanto o NGINX Plus.
Temos um aplicativo que aceita mensagens (TCP) sobre TLS de clientes. Com o NGINX, quero finalizar o TLS no NGINX e, em seguida, o NGINX encaminhará os pacotes decriptografados para o aplicativo. Observe que meu aplicativo NÃO recebe mensagens por HTTP, mas por TCP (por isso, módulos relacionados a HTTP (S) não são válidos para meu caso de uso).
Cliente (s) - (TLS) - > NGINX - (descriptografado) - > Aplicação
Configurei o NGINX para balanceamento de carga TCP seguindo este documento (não SSL). Para isso eu tenho que construir o código fonte com os dois módulos seguintes:
- ngx_stream_core_module
- ngx_stream_ssl_module
Agora, desejo ativar a autenticação mútua com SSL entre o NGINX e os clientes. Estou vendo esta documentação que fala sobre a autenticação do lado do servidor (servidor de verificação do cliente certificado), mas não consigo descobrir as etapas para configurar a autenticação mútua (cliente e servidor verificando os certificados uns dos outros). Você poderia por favor me ajudar lá? No "ngx_stream_ssl_module" não encontro nenhuma opção para mencionar o certificado do cliente.
A seguir está o conteúdo do meu 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;
}
}
Além disso, desejo permitir (handshake SSL) somente se o cliente tiver uma identidade específica (pode ser baseada no identificador do cliente / nome exclusivo). Existe alguma maneira de fazer isso usando NGINX ou NGINX Plus?
Qualquer outra sugestão será apreciada.