F.42. sslinfo — obtener información de SSL del cliente #

F.42.1. Funciones proporcionadas
F.42.2. Autor

El módulo sslinfo proporciona información sobre el certificado SSL que el cliente actual proporcionó al conectarse a PostgreSQL. El módulo no tiene utilidad (la mayoría de las funciones devolverán NULL) si la conexión actual no utiliza SSL.

Parte de la información disponible a través de este módulo también se puede obtener utilizando la vista de sistema integrada pg_stat_ssl.

Esta extensión no se compilará en absoluto a menos que la instalación se haya configurado con --with-ssl=openssl.

F.42.1. Funciones proporcionadas #

ssl_is_used() returns boolean

Devuelve true si la conexión actual al servidor utiliza SSL, y false en caso contrario.

ssl_version() returns text

Devuelve el nombre del protocolo utilizado para la conexión SSL (por ejemplo, TLSv1.0, TLSv1.1, TLSv1.2 o TLSv1.3).

ssl_cipher() returns text

Devuelve el nombre del cifrado (cipher) utilizado para la conexión SSL (por ejemplo, DHE-RSA-AES256-SHA).

ssl_client_cert_present() returns boolean

Devuelve true si el cliente actual ha presentado un certificado de cliente SSL válido al servidor, y false en caso contrario. (El servidor puede o no estar configurado para requerir un certificado de cliente).

ssl_client_serial() returns numeric

Devuelve el número de serie del certificado del cliente actual. Se garantiza que la combinación del número de serie del certificado y el emisor del certificado identifica de forma única un certificado (pero no a su propietario; el propietario debería cambiar sus claves periódicamente y obtener nuevos certificados del emisor).

Por lo tanto, si ejecutas tu propia CA (Autoridad de Certificación) y permites que el servidor acepte únicamente certificados de esta CA, el número de serie es el medio más confiable (aunque no muy nemotécnico) para identificar a un usuario.

ssl_client_dn() returns text

Devuelve el nombre distinguido (subject DN) completo del certificado del cliente actual, convirtiendo los datos de caracteres a la codificación actual de la base de datos. Se asume que si utilizas caracteres no ASCII en los nombres del certificado, tu base de datos también es capaz de representar estos caracteres. Si tu base de datos utiliza la codificación SQL_ASCII, los caracteres no ASCII en el nombre se representarán como secuencias UTF-8.

El resultado se ve como /CN=Somebody /C=Some country/O=Some organization.

ssl_issuer_dn() returns text

Devuelve el nombre distinguido del emisor (issuer DN) completo del certificado del cliente actual, convirtiendo los datos de caracteres a la codificación actual de la base de datos. Las conversiones de codificación se manejan de la misma manera que para ssl_client_dn.

La combinación del valor de retorno de esta función con el número de serie del certificado identifica de forma única al certificado.

Esta función es realmente útil solo si tienes más de un certificado de CA de confianza en el archivo de la autoridad de certificación de tu servidor, o si esta CA ha emitido algunos certificados de autoridad de certificación intermedios.

ssl_client_dn_field(fieldname text) returns text

Esta función devuelve el valor del campo especificado en el asunto (subject) del certificado, o NULL si el campo no está presente. Los nombres de los campos son constantes de cadena que se convierten en identificadores de objeto ASN1 utilizando la base de datos de objetos de OpenSSL. Se aceptan los siguientes valores:

commonName (alias CN)
surname (alias SN)
name
givenName (alias GN)
countryName (alias C)
localityName (alias L)
stateOrProvinceName (alias ST)
organizationName (alias O)
organizationalUnitName (alias OU)
title
description
initials
postalCode
streetAddress
generationQualifier
description
dnQualifier
x500UniqueIdentifier
pseudonym
role
emailAddress

Todos estos campos son opcionales, excepto commonName. Depende completamente de la política de tu CA cuál de ellos se incluirá y cuál no. Sin embargo, el significado de estos campos está estrictamente definido por los estándares X.500 y X.509, por lo que no puedes simplemente asignarles un significado arbitrario.

ssl_issuer_field(fieldname text) returns text

Al igual que ssl_client_dn_field, pero para el emisor del certificado en lugar del asunto (subject) del certificado.

ssl_extension_info() returns setof record

Proporciona información sobre las extensiones del certificado de cliente: el nombre de la extensión, el valor de la extensión y si es una extensión crítica.

F.42.2. Autor #

Victor Wagner , Cryptocom LTD

Dmitry Voronin

Correo electrónico del grupo de desarrollo de OpenSSL de Cryptocom: