openGauss/MogDB与PostgreSQL对比测试SSL之自签名私有证书测试

原作者:彭冲

SSL传输加密简介

SSL认证通过使用SSL证书确保客户端检查服务端证书或者服务器检查客户端证书,SSL认证除了加密数据,也可以识别目标端的真伪,防止网络中间人的伪装攻击。

单向认证与双向认证

单向认证

单向认证一般是指客户端只验证服务器证书的有效性,而服务端不验证客户端证书的有效性。服务器加载服务端证书信息并发送给客户端,客户端使用根证书来验证服务器端证书的有效性。

双向认证

双向认证是指客户端验证服务器证书的有效性,同时服务器端也要验证客户端证书的有效性,只有两端都认证成功,连接才能建立。

客户端验证服务器证书有如下两种模式:

  1. 客户端连接参数SSLMODE设置为verify-ca仅校验数据库证书真伪
  2. 客户端连接参数SSLMODE设置为verify-full校验数据库证书真伪及
    通用名CN匹配数据库连接的hostname

服务端验证客户端证书有如下三种模式:

  1. 数据库认证文件pg_hba.conf配置认证选项clientcert=verify-ca仅验证客户端证书真伪,认证方法可选。
  2. 数据库认证文件pg_hba.conf配置认证选项clientcert=verify-full验证客户端证书真伪及CN匹配数据库连接用户名或映射匹配,认证方法可选。
  3. 数据库认证文件pg_hba.conf配置认证方法cert,免密验证客户端证书真伪及CN匹配数据库连接用户名或映射匹配。

cert认证实际是基于clientcert=verify-full认证选项的trust方法认证。

SSL编译支持

PostgreSQL编译需打开如下选项,同时需要安装openssl

--with-openssl --with-includes=/usr/include/openssl