sslinfo
模块提供有关当客户连接到 PostgreSQL 时提供的 SSL 证书的信息。如果当前连接不使用 SSL,则该模块无用(大多数功能将返回 NULL)。
还可以使用内置系统视图 pg_stat_ssl
获取通过此模块获得的部分信息。
除非安装已使用 --with-ssl=openssl
进行配置,否则此扩展根本不会构建。
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() 返回记录的 setof
提供有关客户端证书扩展的信息:扩展名、扩展值和它是否是一个关键扩展。
Victor Wagner <[email protected]>
,Cryptocom LTD
Dmitry Voronin <[email protected]>
Cryptocom OpenSSL 开发组电子邮件:<[email protected]>