受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

F.38. sslinfo #

sslinfo 模块提供关于当前客户端在连接到 PostgreSQL 时所提供 SSL 证书的信息。如果当前连接 没有使用 SSL,则该模块没有用处(大多数函数将返回 NULL)。

通过本模块可获得的部分信息,也可以使用内置系统视图pg_stat_ssl获得。

如果安装时没有配置 --with-ssl=openssl,则该扩展完全无法 构建。

F.38.1. 提供的函数 #

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 颁发了一些中间 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.38.2. 作者 #

Victor Wagner , Cryptocom LTD

Dmitry Voronin

Cryptocom OpenSSL 开发组的电子邮件:

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。