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Предоставляет информацию о расширениях клиентского сертификата: имя расширения, значение расширения и является ли это критическим расширением.