sslinfo
模块提供有关当前客户端连接到 PostgreSQL 时提供的 SSL 证书的信息。如果当前连接未使用 SSL,则该模块将无用(大多数函数将返回 NULL)。
通过此模块可获得的一些信息也可以使用内置系统视图 pg_stat_ssl
来获取。
除非安装时使用了 --with-ssl=openssl
配置,否则此扩展将无法构建。
ssl_is_used() returns boolean
如果当前服务器连接使用 SSL,则返回 true,否则返回 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
如果当前客户端向服务器提供了一个有效的 SSL 客户端证书,则返回 true,否则返回 false。(服务器可能配置为要求客户端证书,也可能不要求。)
ssl_client_serial() returns numeric
返回当前客户端证书的序列号。证书序列号与证书颁发者的组合可以唯一地标识一个证书(但不能标识其所有者——所有者应该定期更换其密钥,并从颁发者那里获取新证书)。
因此,如果您运行自己的 CA,并且只允许此 CA 颁发的证书被服务器接受,那么序列号就是标识用户的最可靠(尽管不太好记)的手段。
ssl_client_dn() returns text
返回当前客户端证书的完整主题名称,并将字符数据转换为当前数据库编码。假设如果您在证书名称中使用非 ASCII 字符,那么您的数据库也能够表示这些字符。如果您的数据库使用 SQL_ASCII 编码,则名称中的非 ASCII 字符将表示为 UTF-8 序列。
结果类似于 /CN=Somebody /C=Some country/O=Some organization
。
ssl_issuer_dn() returns text
返回当前客户端证书的完整颁发者名称,并将字符数据转换为当前数据库编码。编码转换的处理方式与 ssl_client_dn
相同。
此函数返回值与证书序列号的组合可以唯一地标识证书。
此函数仅在您的服务器证书颁发机构文件中包含多个受信任的 CA 证书,或者该 CA 颁发了某些中间证书颁发机构证书时才真正有用。
ssl_client_dn_field(fieldname text) returns text
此函数返回证书主题中指定字段的值,如果字段不存在则返回 NULL。字段名称是字符串常量,通过 OpenSSL 对象数据库转换为 ASN1 对象标识符。以下值是可接受的:
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
。包含哪些字段以及哪些不包含,完全取决于您的 CA 策略。但是,这些字段的含义由 X.500 和 X.509 标准严格定义,因此您不能随意为其分配任意含义。
ssl_issuer_field(fieldname text) returns text
与 ssl_client_dn_field
相同,但用于证书颁发者而非证书主题。
ssl_extension_info() returns setof record
提供有关客户端证书扩展的信息:扩展名称、扩展值以及它是否是关键扩展。
Victor Wagner <vitus@cryptocom.ru>
, Cryptocom LTD
Dmitry Voronin <carriingfate92@yandex.ru>
Cryptocom OpenSSL 开发团队电子邮件: <openssl@cryptocom.ru>
如果您在文档中发现任何不正确、与您对特定功能的实际体验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。