2024年9月26日:PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:开发版
不支持的版本:11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3

F.40. sslinfo — 获取客户端 SSL 信息 #

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

可以通过此模块获得的一些信息也可以使用内置系统视图 pg_stat_ssl 获取。

除非安装时使用 --with-ssl=openssl 配置,否则此扩展将无法构建。

F.40.1. 提供的功能 #

ssl_is_used() 返回 boolean

如果当前与服务器的连接使用 SSL,则返回 true,否则返回 false。

ssl_version() 返回 text

返回用于 SSL 连接的协议名称(例如,TLSv1.0、TLSv1.1、TLSv1.2 或 TLSv1.3)。

ssl_cipher() 返回 text

返回用于 SSL 连接的密码名称(例如,DHE-RSA-AES256-SHA)。

ssl_client_cert_present() 返回 boolean

如果当前客户端已向服务器提供有效的 SSL 客户端证书,则返回 true,否则返回 false。(服务器可能已配置为要求客户端证书,也可能未配置)。

ssl_client_serial() 返回 numeric

返回当前客户端证书的序列号。证书序列号和证书颁发机构的组合保证了唯一标识证书(但不标识其所有者——所有者应该定期更改其密钥,并从颁发机构获取新证书)。

因此,如果您运行自己的 CA 并仅允许服务器接受来自此 CA 的证书,则序列号是识别用户的最可靠(尽管不是非常助记)的方法。

ssl_client_dn() 返回 text

返回当前客户端证书的完整主题,并将字符数据转换为当前数据库编码。假设如果在证书名称中使用非 ASCII 字符,则您的数据库也能够表示这些字符。如果您的数据库使用 SQL_ASCII 编码,则名称中的非 ASCII 字符将表示为 UTF-8 序列。

结果看起来像 /CN=Somebody /C=Some country/O=Some organization

ssl_issuer_dn() 返回 text

返回当前客户端证书的完整颁发机构名称,并将字符数据转换为当前数据库编码。编码转换与 ssl_client_dn 的处理方式相同。

此函数的返回值与证书序列号的组合唯一标识证书。

只有当服务器的证书颁发机构文件中有多个受信任的 CA 证书,或者此 CA 已颁发一些中间证书颁发机构证书时,此函数才真正有用。

ssl_client_dn_field(fieldname text) 返回 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) 返回 text

ssl_client_dn_field 相同,但针对证书颁发机构而不是证书主题。

ssl_extension_info() 返回 setof record

提供有关客户端证书扩展的信息:扩展名称、扩展值以及它是否为关键扩展。

F.40.2. 作者 #

Victor Wagner ,Cryptocom LTD

Dmitry Voronin

Cryptocom OpenSSL 开发组的电子邮件:

提交更正

如果您在文档中看到任何不正确的内容、与您对特定功能的体验不符的内容或需要进一步澄清的内容,请使用 此表单 报告文档问题。