F.53. sslinfo — получить информацию о клиенте SSL#
F.53. sslinfo — получить информацию о клиенте SSL #
Модуль sslinfo
предоставляет информацию о SSL-сертификате, предоставленном текущим клиентом при подключении к Tantor BE. Модуль бесполезен (большинство функций вернут NULL), если текущее подключение не использует SSL.
Некоторую информацию, доступную через этот модуль, также можно получить
с помощью встроенного системного представления
pg_stat_ssl
.
Это расширение не будет собираться вообще, если установка не была настроена с --with-ssl=openssl
.
F.53.1. Предоставляемые функции #
-
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
Возвращает полное имя текущего клиентского сертификата, преобразуя символьные данные в текущую кодировку базы данных. Предполагается, что если вы используете не-ASCII символы в именах сертификатов, ваша база данных также способна представлять эти символы. Если ваша база данных использует кодировку SQL_ASCII, не-ASCII символы в имени будут представлены в виде последовательностей UTF-8.
Результат выглядит как
/CN=Кто-то /C=Некоторая страна/O=Некоторая организация
.-
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
Предоставьте информацию о расширениях клиентского сертификата: имя расширения, значение расширения и является ли оно критическим расширением.
F.53.2. Автор #
Виктор Вагнер <vitus@cryptocom.ru>
, Cryptocom LTD
Дмитрий Воронин <carriingfate92@yandex.ru>
E-Mail группы разработки Cryptocom OpenSSL:
<openssl@cryptocom.ru>