F.37. sslinfo

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

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

F.37.1. 提供的功能

  • ssl_is_used() returns boolean

    • 如果当前与服务器的连接使用 SSL,则返回 true,否则返回 false。
  • ssl_version() returns text

    • 返回用于 SSL 连接的协议的名称(例如 TLSv1.0 TLSv1.1 或 TLSv1.2)。
  • ssl_cipher() returns text

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

    • 如果当前 Client 端已向服务器提供了有效的 SSLClient 端证书,则返回 true,否则返回 false。 (服务器可能已配置,也可能未配置为需要 Client 端证书.)
  • ssl_client_serial() returns numeric

    • 返回当前 Client 端证书的序列号。证书序列号和证书颁发者的组合可确保唯一地标识证书(但不能唯一地标识证书的所有者,所有者应定期更改其密钥并从颁发者那里获取新证书)。

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

  • ssl_client_dn() returns text

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

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

  • ssl_issuer_dn() returns text

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

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

仅当服务器的证书颁发机构文件中有多个受信任的 CA 证书,或者此 CA 颁发了一些中间证书颁发机构证书时,此功能才 true 有用。

  • 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 的 Policy,哪些将包括在内,哪些不包括在内。但是,这些字段的含义严格由 X.500 和 X.509 标准定义,因此您不能仅仅为它们分配任意含义。

  • ssl_issuer_field(fieldname text) returns text

    • ssl_client_dn_field相同,但适用于证书颁发者而不是证书主题。
  • ssl_extension_info() returns setof record

    • 提供有关 Client 端证书 extensions 的信息:extensions,扩展值以及是否为关键扩展。

F.37.2. Author

Victor Wagner <[email protected]>,Cryptocom LTD

德米特里·沃罗宁<[email protected]>

Cryptocom OpenSSL 开发组的电子邮件:<[email protected]>