ssl no postgres

1

Estou tentando configurar meu servidor postgres para fazer conexões ssl. Eu configurei o postgresql.conf e o pg_hba.conf corretamente. Eu criei uma chave e um certificado autoassinado (server.crt e server.key) no diretório de dados postgres e copiei o server.crt para root.crt.

Eu também configuro um certificado e chave em outro host usando o root.crt do servidor para assinar o certificado de cliente. Quando eu uso o openssl para testar o certificado está tudo bem. No entanto, quando tento me conectar ao servidor postgres, ele falha:

psql -h <HOSTNAME> -U <USER> -d <DB>
psql: SSL error: certificate verify failed

Alternativamente:

openssl s_client -connect <HOSTNAME>:5432 -state -msg -showcerts -debug
CONNECTED(00000003)
SSL_connect:before/connect initialization
write to 080ACFE0 [080AD570] (145 bytes => 145 (0x91))
0000 - 80 8f 01 03 01 00 66 00-00 00 20 00 00 39 00 00   ......f... ..9..
...
0080 - 04 fd be bd 49 e7 1d 99-f5 bb 7e 24 2e fe 34 e8   ....I.....~$..4.
0090 - d7                                                .
>>> SSL 2.0 [length 008f], CLIENT-HELLO
    01 03 01 00 66 00 00 00 20 00 00 39 00 00 38 00
    ...
    be bd 49 e7 1d 99 f5 bb 7e 24 2e fe 34 e8 d7
SSL_connect:SSLv2/v3 write client hello A
read from 080ACFE0 [080B2AD0] (7 bytes => 0 (0x0))
18357:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:226:

Por fim, se eu configurar o openssl para servir no lado do servidor e conectar-me a partir do host do cliente, tudo funcionará bem:

openssl s_client -connect <HOSTNAME>:4433 -state -msg -showcerts -debug

Alguma idéia do porque o postgres está se recusando aos meus certificados? Para minha configuração atual, o servidor é o FreeBSD 4.7 executando o postgres 8.1, e o cliente é o CentOS 4 executando o postgres 9.0. Não tenho certeza se isso fatores aqui ...

    
por Eric Snow 09.02.2011 / 01:30

2 respostas

2

O PostgreSQL não inicia a negociação SSL até que você tenha enviado um pacote instruindo-o a fazê-lo. s_client espera que ele faça SSL antes desse pacote. Veja o link para documentação sobre como o SSL funciona no PostgreSQL.

Verifique se o seu certificado raiz está no local correto no cliente e se está legível pelo postgres. Talvez ao ponto de correr o cursor para se certificar de que é realmente lido. essa é de longe a razão mais comum para as coisas não funcionarem.

E, como já foi observado anteriormente, você deve sair da 8.1 o mais rápido possível, já que ele já está acabando. Mas isso não deve ter grande efeito sobre isso.

    
por 09.02.2011 / 14:14
2

Remover meu antigo ~ / .postgresql resolveu o problema para mim. Tente strace psql para verificar as chamadas open .

    
por 29.08.2011 / 13:45