Suponha que haja um servidor PostgreSQL em execução e que tenha o SSL ativado. Usando ferramentas Linux "padrão" e PostgreSQL, como posso examinar seu certificado SSL?
Espero uma saída semelhante à que você obteria da execução openssl x509 -text ...
. E estou esperando uma resposta de linha de comando de um ou dois liners para que eu não precise recorrer à execução de um farejador de pacotes.
Como não tenho acesso ao servidor PostgreSQL, não posso olhar diretamente para os arquivos de configuração.
Eu não tenho um logon de superusuário, portanto não consigo obter o valor da ssl_cert_file
configuração e, pg_read_file
em seguida, utilizá-la.
O uso openssl s_client -connect ...
não funciona porque o PostgreSQL parece não querer executar o handshake SSL imediatamente.
De uma rápida olhada na psql
documentação, não foi possível encontrar um parâmetro de linha de comando que o faça mostrar essas informações na inicialização. (Embora ele me mostre certas informações cifradas.)
String connectionURL = "jdbc:postgresql://server:62013/dbname"; Properties props = new Properties(); props.setProperty("user", "username"); props.setProperty("password", "password"); props.setProperty("ssl", "true"); props.setProperty("sslfactory", DumperFactory.class.getName()); Connection con = null; // Load the Driver class. Class.forName("org.postgresql.Driver"); con = DriverManager.getConnection(connectionURL, props);
Se você não deseja se preocupar com a instalação de java e compilação, e já possui python, tente este script python: https://github.com/thusoy/postgres-mitm/blob/master/postgres_get_server_cert.py
Eu o uso para verificar as datas do certificado:
Ou para o certificado completo como texto:
fonte
curl https://raw.githubusercontent.com/thusoy/postgres-mitm/master/postgres_get_server_cert.py | python - example.com:5432
(mas certifique-se de que você executar este caminho !!)A resposta do csd realmente me salvou. Aqui está uma explicação mais detalhada para quem não conhece ou esqueceu o java.
Verifique se o seu servidor pode compilar java. Tente o comando "what javac", se ele exibir algo como "... no javac in ...", você precisará instalar um JDK (o JRE não funcionará, ele possui "java", mas não "javac").
Instale o postgresql-jdbc se ainda não o tiver. Para RHEL6, o comando é "yum install postgresql-jdbc". Descubra onde os arquivos jar estão instalados. Haverá vários deles, um para cada versão. Eu usei "/usr/share/java/postgresql-jdbc3.jar".
Copie o código do csd e insira as informações do banco de dados (a outra resposta) ou use minha versão ligeiramente modificada no final desta resposta. Salve-o em um arquivo chamado exatamente "ShowPostgreSQLCert.java". Questões em maiúsculas / minúsculas, chame-o de qualquer outra coisa e não será compilado.
No diretório com o arquivo ShowPostgreSQLCert.java, execute o seguinte comando (modifique o local do postgresql-jdbc3.jar, se necessário): "javac -cp /usr/share/java/postgresql-jdbc3.jar ShowPostgreSQLCert.java". Agora você deve ter 3 arquivos .class no mesmo diretório.
Por fim, execute o seguinte comando: "java -cp.: / Usr / share / java / postgresql-jdbc3.jar ShowPostgreSQLCert". O "." depois de "-cp" significa que ele deve procurar no diretório atual os arquivos .class. Você pode inserir o caminho completo para os arquivos de classe aqui, lembre-se de manter o ":" entre o caminho e o local do arquivo .jar.
Se você precisar executar o comando em uma máquina diferente, precisará ter o mesmo arquivo jar instalado (postgresql-jdbc3.jar), ou provavelmente poderá copiá-lo do servidor em que compilou os arquivos .class. Em seguida, basta copiar os arquivos .class e executar o comando a partir de 5. depois de modificar os caminhos.
Modifiquei levemente o código para que você possa transmitir informações do banco de dados na linha de comando, em vez de compilá-las no arquivo .class. Basta executá-lo sem argumentos e ele exibirá uma mensagem mostrando quais argumentos ele espera. O código do csd + modificações é:
fonte
Adicionei algum código de /programming/3313020/write-x509-certificate-into-pem-formatted-string-in-java para gerar os certificados como PEM e removi a necessidade de especificar um db, nome de usuário ou senha (eles não são necessários para obter o certificado).
Usando isso, pude verificar se, infelizmente, é necessário reiniciar o PostgreSQL para mudar para um novo certificado.
Como não sou desenvolvedor Java, minhas etapas para criar e executar provavelmente não são tão boas, mas funcionam, desde que você encontre um jdbc do postgresql
Compilar:
Para correr:
Saída de amostra:
Fonte:
fonte