16.7. Conexões TCP/IP seguras com SSL

Para aumentar a segurança criptografando as comunicações cliente/servidor, o PostgreSQL possui suporte nativo para conexões SSL. É necessário que o OpenSSL esteja instalado tanto no cliente quanto no servidor, e que o suporte no PostgreSQL tenha sido ativado em tempo de construção (consulte o Capítulo 14).

Uma vez compilado com suporte a SSL, o servidor PostgreSQL pode ser inicializado com SSL ativado, definindo no arquivo postgresql.conf o parâmetro ssl com o valor on. Quando inicializado no modo SSL, o servidor procura pelos arquivos server.key e server.crt no diretório de dados, que devem conter a chave privada do servidor e o certificado, respectivamente. Estes arquivos devem ser configurados de forma correta para que o servidor possa ser inicializado com SSL ativado. Se a chave privada estiver protegida por uma frase-senha (passphrase), o servidor solicitará esta frase-senha, não inicializando até que seja fornecida.

O servidor atende tanto as conexões comuns quanto as conexões SSL na mesma porta TCP, e negocia com o cliente conectando se vai usar ou não o SSL. Por padrão esta é uma opção do cliente; deve ser visto na Seção 19.1 como configurar o servidor para que seja requerido o uso do SSL para algumas ou para todas as conexões.

Para obter detalhes sobre como criar a chave privada do servidor e o certificado, deve ser consultada a documentação do OpenSSL. Pode ser utilizado para testes um certificado auto-assinado, mas no ambiente de produção deve ser utilizado um certificado assinado por uma autoridade certificadora (CA) (por uma CA global ou por uma local), para que o cliente possa verificar a identidade do servidor. Para criar rapidamente um certificado auto-assinado pode ser utilizado o seguinte comando do OpenSSL:

openssl req -new -text -out server.req

Devem ser fornecidas as informações solicitadas pelo openssl. Assegure-se de especificar "Common Name" como nome do hospedeiro local; a senha de confronto (challenge password) pode ser deixada em branco. O programa gera uma chave que é protegida por uma frase-senha; não é aceita uma frase-senha com menos de quatro caracteres. Para remover a frase-senha (o que deve ser feito se for desejada uma inicialização automática do servidor), devem ser executados os comandos:

openssl rsa -in privkey.pem -out server.key
rm privkey.pem

Deve ser fornecida a frase-senha antiga para desbloquear a chave existente. Agora deve ser executado

openssl req -x509 -in server.req -text -key server.key -out server.crt
chmod og-rwx server.key

para tornar o certificado um certificado auto-assinado, e para copiar a chave e o certificado para onde o servidor procura pelos mesmos.

Se for requerida a verificação dos certificados cliente, devem ser colocados no arquivo root.crt no diretório de dados os certificados das CA(s) que se deseja verificar. Quando presente, é requisitado do cliente um certificado cliente durante a inicialização da conexão SSL, que deve ter sido assinado por um dos certificados presentes no arquivo root.crt.

Quando o arquivo root.crt não está presente, os certificados cliente não são requeridos nem verificados. Neste modo o SSL fornece segurança para a comunicação, mas não para autenticação.

Os arquivos server.key, server.crt e root.crt são examinados apenas durante a inicialização do servidor; o servidor deve ser reinicializado para que as alterações feitas nestes arquivos tenham efeito.

SourceForge.net Logo CSS válido!