Skip to content

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

F.42.1. 提供的功能
F.42.2. 作者

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

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

除非使用--with-ssl=openssl配置安装,否则此扩展根本不会构建。

F.42.1. 提供的函数#

ssl_is_used() 返回布尔值

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

ssl_version() 返回文本

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

ssl_cipher() 返回文本

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

ssl_client_cert_present() 返回布尔值

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

ssl_client_serial() 返回数字

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

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

ssl_client_dn() 返回文本

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

结果类似于 /CN=Somebody /C=Some country/O=Some organization

ssl_issuer_dn() 返回文本

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

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

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

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

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

ssl_extension_info() 返回记录集

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

F.42.2. 作者#

Victor Wagner<[[email protected]](/cdn-cgi/l/email-protection#5a2c332e2f291a3928232a2e3539353774282f)>,Cryptocom LTD

Dmitry Voronin<[[email protected]](/cdn-cgi/l/email-protection#77141605051e1e1910111603124e45370e161913120f590502)>

Cryptocom OpenSSL 开发组的电子邮件:<[[email protected]](/cdn-cgi/l/email-protection#f79887929984849bb794858e87839894989ad98582)>