F.36. sslinfo

sslinfo模块提供关于连接到PostgreSQL 时当前客户端提供的SSL认证的信息。如果当前连接没有使用SSL, 那么该模块是无用的(大部分函数将返回NULL)。

这个扩展不会建立,除非安装时配置带有--with-openssl

F.36.1. 提供的函数

ssl_is_used() returns boolean

如果当前到服务器的连接使用了SSL则返回TRUE,否则返回FALSE。

ssl_version() returns text

返回SSL连接使用的协议名(如SSLv2,SSLv3,或TLSv1)

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证书在服务器的root.crt文件时, 或者如果这个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)
organizationUnitName (alias OU)
title
description
initials
postalCode
streetAddress
generationQualifier
description
dnQualifier
x500UniqueIdentifier
pseudonym
role
emailAddress

所有这些字段都是可选的,除了commonName。 它完全取决于你的证书的政策将包括或不包括。不过, 这些字段的含义严格的由X.500和X.509标准定义,所以不能任意分配它们的含义。

ssl_issuer_field(fieldname text) returns text

ssl_client_dn_field相同,除了是证书发行者而不是证书主题。

F.36.2. 作者

Victor Wagner , Cryptocom LTD

Cryptocom OpenSSL开发团队的E-Mail: