Supongamos que hay un servidor PostgreSQL en ejecución y tiene SSL habilitado. Usando herramientas "estándar" de Linux y PostgreSQL, ¿cómo puedo examinar su certificado SSL?
Espero una salida similar a la que obtendría al ejecutar openssl x509 -text ...
. Y espero una respuesta de línea de comando de una o dos líneas para no tener que recurrir a ejecutar un sniffer de paquetes.
No tengo acceso al servidor PostgreSQL, por lo que no puedo ver sus archivos de configuración directamente.
No tengo un inicio de sesión de superusuario, por lo que no puedo obtener el valor de la ssl_cert_file
configuración y luego pg_read_file
en él.
El uso openssl s_client -connect ...
no funciona porque PostgreSQL no parece querer hacer el protocolo de enlace SSL de inmediato.
De un vistazo rápido a la psql
documentación, no pude encontrar un parámetro de línea de comandos que lo haga mostrar esa información en el inicio. (Aunque me muestra cierta información de cifrado).
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);
Si no quiere molestarse en instalar java y compilar, y ya tiene Python, puede probar este script de Python: https://github.com/thusoy/postgres-mitm/blob/master/postgres_get_server_cert.py.
Lo uso para verificar las fechas del certificado:
O para el certificado completo como texto:
fuente
curl https://raw.githubusercontent.com/thusoy/postgres-mitm/master/postgres_get_server_cert.py | python - example.com:5432
(¡pero asegúrese de lo que ejecuta de esta manera!)La respuesta de csd realmente me salvó. Aquí hay un tutorial más detallado para aquellos de nosotros que no conocemos o hemos olvidado Java.
Asegúrese de que su servidor pueda compilar Java. Pruebe el comando "which javac", si genera algo como "... no javac en ...", entonces necesita instalar un JDK (JRE no funcionará, tiene "java" pero no "javac").
Instale postgresql-jdbc si aún no lo tiene. Para RHEL6, el comando es "yum install postgresql-jdbc". Averigua dónde están instalados los archivos jar. Habrá varios de ellos, uno para cada versión. Usé "/usr/share/java/postgresql-jdbc3.jar".
Copie el código de CDS e inserte la información de la base de datos (la otra respuesta), o use mi versión ligeramente modificada al final de esta respuesta. Guárdelo en un archivo llamado exactamente "ShowPostgreSQLCert.java". Los asuntos en mayúsculas / minúsculas, llámalo como sea y no se compilará.
En el directorio con el archivo ShowPostgreSQLCert.java, ejecute el siguiente comando (modifique la ubicación de postgresql-jdbc3.jar si es necesario): "javac -cp /usr/share/java/postgresql-jdbc3.jar ShowPostgreSQLCert.java". Ahora debería tener 3 archivos .class en el mismo directorio.
Finalmente, ejecute el siguiente comando: "java -cp.: / Usr / share / java / postgresql-jdbc3.jar ShowPostgreSQLCert". Los "." después de "-cp" significa que debe buscar en el directorio actual los archivos .class. Puede insertar la ruta completa a los archivos de clase aquí, solo recuerde mantener el ":" entre la ruta y la ubicación del archivo .jar.
Si necesita ejecutar el comando en una máquina diferente, debe tener el mismo archivo jar instalado (postgresql-jdbc3.jar), o probablemente solo puede copiarlo desde el servidor en el que compiló los archivos .class. Luego simplemente copie los archivos .class y ejecute el comando desde 5. después de modificar las rutas.
Modifiqué ligeramente el código para que pueda pasar la información de la base de datos en la línea de comando en lugar de compilarla en el archivo .class. Simplemente ejecútelo sin argumentos y mostrará un mensaje que muestra qué argumentos espera. El código + modificaciones del csd es:
fuente
Agregué un código de /programming/3313020/write-x509-certificate-into-pem-formatted-string-in-java para generar los certificados como PEM, y eliminé la necesidad de especificar un db, nombre de usuario o contraseña (no son necesarios para obtener el certificado).
Usando esto, pude verificar que un reinicio de PostgreSQL desafortunadamente parece necesario para cambiar a un nuevo certificado.
Al no ser un desarrollador de Java, mis pasos para compilar y ejecutar probablemente no sean tan buenos, pero funcionan, siempre que pueda encontrar un jdbc postgresql
Compilar:
Correr:
Salida de muestra:
Fuente:
fuente