sslinfo — получение информации о SSL клиента#

Примечание

Эта страница переведена при помощи нейросети GigaChat.

Модуль предоставляет сведения о сертификате SSL, который использовал клиент при подключении к серверу PostgreSQL. Если текущее соединение не осуществляется через SSL, большинство функций этого модуля вернут значение NULL, делая его практически бесполезным.

Большинство данных, доступных через этот модуль, также можно получить с помощью встроенного системного представления pg_stat_ssl.

Данный модуль не будет компилироваться, если сборка PostgreSQL была выполнена с опцией --with-ssl=openssl.

Предоставляемые функции#

ssl_is_used() returns boolean

Возвращает true, если текущее соединение с сервером использует SSL, и false в другом случае.

ssl_version() returns text

Возвращает имя протокола, используемого для соединения SSL (например, TLSv1.0, TLSv1.1, TLSv1.2 или TLSv1.3).

ssl_cipher() returns text

Возвращает название шифра, используемого для соединения SSL (например, DHE-RSA-AES256-SHA).

ssl_client_cert_present() returns boolean

Возвращает true, если текущий клиент представил действительный сертификат SSL клиента серверу, и false в противном случае. (Сервер может быть или не быть настроен для требования сертификата клиента.)

ssl_client_serial() returns numeric

Возвращает серийный номер текущего сертификата клиента. Комбинация серийного номера сертификата и эмитента сертификата гарантированно уникально идентифицирует сертификат (но не его владельца – владелец должен регулярно менять свои ключи и получать новые сертификаты от эмитента).

Если используется собственный центр сертификации и принимаются только сертификаты из этого центра на сервере, то серийный номер сертификата является наиболее надежным (хотя и не очень запоминающимся) способом идентификации пользователя.

ssl_client_dn() returns text

Возвращает полный субъект текущего сертификата клиента, преобразуя символьные данные в текущую кодировку базы данных. Предполагается, что если используется небуквенные символы в именах сертификатов, база данных также способна представлять эти символы. Если база данных использует кодировку SQL_ASCII, небуквенные символы в имени будут представлены как последовательности UTF-8.

Результат выглядит так /CN=Somebody /C=Some country/O=Some organization.

ssl_issuer_dn() returns text

Возвращает полное имя эмитента текущего клиентского сертификата, преобразуя символьные данные в текущую кодировку базы данных. Преобразования кодировки обрабатываются так же, как и для ssl_client_dn.

Комбинация возвращаемого значения этой функции с серийным номером сертификата однозначно идентифицирует сертификат.

Эта функция действительно полезна только в том случае, если есть более одного доверенного сертификата центра сертификации в файле полномочий сервера или если этот центр сертификации выпустил некоторые промежуточные сертификаты центра сертификации.

ssl_client_dn_field(fieldname text) returns text

Эта функция возвращает значение указанного поля в сертификате субъекта или NULL, если поле отсутствует. Имена полей являются строковыми константами, которые преобразуются в идентификаторы объектов ASN1 с использованием базы данных объектов OpenSSL. Допустимы следующие значения:

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

Все эти поля необязательны, за исключением commonName. Это полностью зависит от политики центра сертификации, какие из них будут включены, а какие нет. Однако смысл этих полей строго определен стандартами X.500 и X.509, поэтому нельзя присвоить им произвольное значение.

ssl_issuer_field(fieldname text) returns text

То же самое, что и ssl_client_dn_field, но для выдавшего сертификат, а не для субъекта сертификата.

ssl_extension_info() returns setof record

Предоставляет информацию о расширениях клиентского сертификата: имя расширения, значение расширения и является ли это критическим расширением.