sslinfo

Модуль sslinfo предоставляет информацию о SSL-сертификате, который был предоставлен текущим клиентом при подключении к QHB. Этот модуль бесполезен (большинство функций возвратят NULL), если для текущего подключения не используется SSL.

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

Это расширение не будет собираться, если установка была произведена без ключа --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

Возвращает полное имя субъекта текущего клиентского сертификата, преобразуя символьные данные в текущую кодировку базы данных. Предполагается, что если в именах сертификатов используются символы вне 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

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


Автор

Виктор Вагнер (vitus@cryptocom.ru), ООО «Криптоком»

Дмитрий Воронин (carriingfate92@yandex.ru)

Адрес электронной почты группы разработчиков OpenSSL в ООО «Криптоком»: (openssl@cryptocom.ru)