Postgresql 中文操作指南
F.42. sslinfo — obtain client SSL information #
sslinfo 模块提供有关当前客户端连接到 PostgreSQL 时提供的 SSL 证书的信息。如果当前连接不使用 SSL,则此模块无用(大多数函数将返回 NULL)。
还可以使用内置系统视图 pg_stat_ssl 获得通过此模块获得的一些信息。
除非使用 —with-ssl=openssl 配置安装,否则根本无法构建此扩展。
F.42.1. Functions Provided #
-
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
-
-
提供有关客户端证书扩展的信息:扩展名、扩展值以及它是否为关键扩展。
F.42.2. Author #
Victor Wagner < link:mailto:vitus@cryptocom.ru[vitus@cryptocom.ru]> ,Cryptocom LTD
Dmitry Voronin < link:mailto:carriingfate92@yandex.ru[carriingfate92@yandex.ru]>
Cryptocom OpenSSL 开发组的电子邮件: < link:mailto:openssl@cryptocom.ru[openssl@cryptocom.ru]>