O que eu quero alcançar é isso
[Banco de dados Postgresql] -- TCP transparente -- [clientes na nuvem]
[Banco de Dados Postgresql] -- TCP transparente -- [nginx no servidor de salto] --SSL TCP-- [clientes fora da nuvem]
Gostaria de adicionar uma camada adicional de criptografia SSL por proxy reverso nginx em fluxo com parâmetro SSL.
A configuração adicionada nginx.conf
é esta (com certificados SSL e chaves já feitas)
stream{
upstream pg{
server [postgresql server ip]:5432;
}
server{
listen 5430;
#ssl_preread on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
ssl_certificate /etc/nginx/cert/server.crt;
ssl_certificate_key /etc/nginx/cert/server.key;
ssl_session_timeout 2h;
ssl_verify_client off;
proxy_pass pg;
}
}
Eu tentei telnet [jump server public ip] 5430
e a conexão abriu. No entanto, como uso o cliente dbeaver para conectar-me a esse gateway, ele respondeu 'SSL não é permitido no servidor'. O que está errado? O postgresql sabe que a conexão deste cliente dbeaver com nginx é criptografada por SSL e respondeu uma mensagem de erro?
Você não pode fazer isso, pois o TLS no PostgreSQL não é um simples wrapper em torno da conexão não TLS, como é com HTTPS sendo HTTP sobre TLS. Em vez disso, começa com alguma comunicação simples que é atualizada para TLS. Por causa disso, um proxy reverso não pode simplesmente encerrar o TLS e encaminhar os dados internos do aplicativo, mas deve realmente implementar alguns princípios básicos do protocolo usado pelo PostgreSQL - e o nginx não fornece isso.
Para obter mais detalhes, consulte a terminação NGINX TLS para PostgreSQL