[转帖]openGauss与PostgreSQL对比测试SSL之自签名CA证书单向认证测试

opengauss,postgresql,对比,测试,ssl,签名,ca,证书,单向,认证 · 浏览次数 : 0

小编点评

**测试说明** 该文档测试自签名CA证书单向认证,主要测试以下几个方面: 1. **CA证书签名的验证**:客户端只验证服务器证书的有效性,而服务器端不验证客户端证书的有效性。 2. **证书有效期的验证**:客户端使用CA证书验证数据库服务器证书的有效性。 3. **通用名CN匹配验证**:客户端使用通用名CN验证数据库服务器证书是否与客户端连接的hostname匹配。 4. **sslmode连接参数设置**:客户端可以选择使用verify-ca或verify-full连接参数设置,分别只验证数据库证书真伪或验证数据库证书真伪以及通用名CN匹配数据库连接的hostname。 **测试步骤** 1. **创建CA证书CA证书**: ```bash openssl req -new -x509 -days 365 -nodes \\ -config openssl.cnf \\ -out ca.crt -keyout ca.key -subj \"/CN=FooCA\" ``` 2. **使用CA证书对证书请求文件签名**: ```bash openssl x509 -req -in server.csr -text -days 5 \\ -CA ca.crt \\ -CAkey ca.key \\ -CAcreateserial \\ -out server.crt ``` 3. **传输数据库服务器证书及未加密的私钥文件至数据库服务器修改文件权限**: ```bash chmod 0600 server.crt server.key ``` 4. **配置PostgreSQL参数**: ``` hostssl all all 0.0.0.0/0 md5 ``` 5. **发送CA证书到数据库客户端**: ```bash cat ca.crt > ~/.postgresql/root.crt ``` 6. **测试数据库客户端未配置证书测试**: ```bash openGaussgsql \"sslmode=verify-ca\" -p6432 -h 192.168.137.11Password for user postgres: psql (12.6)SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)Type \"help\" for help.postgres=# \\q ``` 7. **测试数据库服务器证书设置的通用名CN是否匹配客户端连接的hostname**: ```bash openGaussgsql "sslmode=verify-full" -p6432 -h opengauss1 -Upostgresgsql: server common name \"192.168.137.5\" does not match host name \"opengauss1\" ``` **总结** 该测试验证了自签名CA证书单向认证的基本流程,包括CA证书签名的验证、证书有效期的验证、通用名CN匹配验证和sslmode连接参数设置。

正文

https://zhuanlan.zhihu.com/p/367697233

 

本文测试自签名CA证书的单向认证: 客户端只验证服务器证书的有效性,而服务器端不验证客户端证书的有效性。服务器加载证书信息并发送给客户端,客户端使用根证书来验证服务器端证书的有效性。

服务端证书的客户端认证模式

客户端SSLMODE设置为verify-ca仅校验数据库证书真伪。

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

自签名CA证书单向认证测试

1.创建CA证书

CA证书用于给数据库服务器证书签名,同时需要把CA证书发送给数据库客户端,客户端使用CA证书验证数据库服务器证书。

$ openssl req -new -x509 -days 365 -nodes \
-config openssl.cnf \
-out ca.crt -keyout ca.key -subj "/CN=FooCA"

2.生成数据库服务器证书请求文件

$ openssl req -new -nodes -text \
-config openssl.cnf \
-out server.csr \
-keyout server.key \
-subj "/CN=192.168.137.5"

将证书请求文件(包含用户信息)和证书签名分开操作,证书请求文件可重用,因为后面可能需要重新生成签名信息。

3.使用CA证书对证书请求文件签名

$ openssl x509 -req -in server.csr -text -days 5 \
-CA ca.crt \
-CAkey ca.key \
-CAcreateserial \
-out server.crt

这里设置有效期为5天,可以观察在服务器证书有效期小于7天的时候,连接登录后会在日志中产生告警提醒。

4.传输数据库服务器证书及未加密的私钥文件至数据库服务器

修改文件权限以符合安全设置。

$ chmod 0600 server.crt server.key

传输文件到数据库服务器PGDATA目录。

$ cp server.crt server.key $PGDATA

注意:如果PostgreSQL使用-g, –allow-group-access

开启了组访问权限,则需要拷贝文件到PGDATA目录之外以符合安全设置。

5.数据库SSL参数配置

pg_hba.conf文件配置hostssl条目,认证方法保持md5或者scram不变。

hostssl  all  all  0.0.0.0/0  md5

说明:也可以按原来的host连接类型,同时支持非ssl和ssl连接,配置为hostssl只支持hostssl,这里配置为hostssl。

postgreql.conf文件配置参数

ssl=on
ssl_cert_file= 'server.crt'
ssl_key_file= 'server.key'

然后重启数据库服务。

6.发送CA证书到数据库客户端

本文数据库客户端使用linux下psql,证书文件的默认路径为$HOME/.postgresql/root.crt。

cat ca.crt > ~/.postgresql/root.crt
chmod 0600 ~/.postgresql/root.crt

测试一

数据库客户端未配置证书测试,删除上面第6步的文件。

openGauss

gsql "sslmode=verify-ca" -p6432 -h 192.168.137.5 -Upostgres
gsql: root certificate file "/home/omm/.postgresql/root.crt" does not exist
Either provide the file or change sslmode to disable server certificate verification.

PostgreSQL

psql "sslmode=verify-ca" -h192.168.137.11
psql: error: root certificate file "/home/postgres/.postgresql/root.crt" does not exist
Either provide the file or change sslmode to disable server certificate verification.

可以看到设置sslmode=verify-ca后,客户端需要验证服务器证书,未配置默认root.crt问题,提示文件不存在,符合预期。

测试二

人为修改数据库客户端证书内容。

openGauss

gsql "sslmode=verify-ca" -p6432 -h 192.168.137.5 -Upostgres
gsql: could not read root certificate file "/home/omm/.postgresql/root.crt": too long
gsql "sslmode=verify-ca" -p6432 -h 192.168.137.5 -Upostgres
gsql: could not read root certificate file "/home/omm/.postgresql/root.crt": wrong tag

PostgreSQL

psql "sslmode=verify-ca" -h192.168.137.11
psql: error: could not read root certificate file "/home/postgres/.postgresql/root.crt": 
bad base64 decode
psql "sslmode=verify-ca" -p7000 -h192.168.137.11
psql: error: could not read root certificate file "/home/postgres/.postgresql/root.crt": too long

可以看到root.crt证书文件内容如果被篡改也是有相应的报错提示,符合预期。

测试三

测试验证数据库服务器证书,将正确的证书文件发送至数据库客户端,参考上面第6步配置。

openGauss

gsql "sslmode=verify-ca" -p6432 -h 192.168.137.5 -Upostgres
Password for user postgres: 
gsql ((GaussDB Kernel V500R001C20 build ) compiled at 2021-03-09 18:30:51 commit 0 last mr  )
SSL connection (cipher: DHE-RSA-AES128-GCM-SHA256, bits: 128)
Type "help" for help.

postgres=>

PostgreSQL

psql "sslmode=verify-ca"  -h192.168.137.11
Password for user postgres: 
psql (12.6)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

postgres=# \q

使用sslmode=verify-ca仅验证服务器证书真伪,符合预期。

测试四

测试数据库服务器证书设置的通用名CN是否匹配客户端连接的hostname。

openGauss

gsql "sslmode=verify-full" -p6432 -h opengauss1 -Upostgres
gsql: server common name "192.168.137.5" does not match host name "opengauss1"

PostgreSQL

psql "sslmode=verify-full" -hnode11
psql: error: server certificate for "192.168.137.11" does not match host name "node11"

分别使用ip地址及主机名测试,与通用名CN匹配的ip地址可成功登录,使用主机名连接报错,报错提示如上,符合预期。

总结

1.数据库服务器证书的客户端认证需要在客户端配置服务器证书签名的CA证书,服务器设置支持hostssl连接,客户端使用sslmode连接参数。

2.sslmode连接参数设置为verify-ca仅校验数据库证书真伪,设置为verify-full校验数据库证书真伪及通用名CN匹配数据库连接的hostname。

与[转帖]openGauss与PostgreSQL对比测试SSL之自签名CA证书单向认证测试相似的内容:

[转帖]openGauss与PostgreSQL对比测试SSL之自签名CA证书单向认证测试

https://zhuanlan.zhihu.com/p/367697233 本文测试自签名CA证书的单向认证: 客户端只验证服务器证书的有效性,而服务器端不验证客户端证书的有效性。服务器加载证书信息并发送给客户端,客户端使用根证书来验证服务器端证书的有效性。 服务端证书的客户端认证模式 客户端SS

[转帖]openGauss 3.0 单节点安装部署

https://cdn.modb.pro/db/568455 openGauss来源于PostgreSQL 9.2.4pg使用c实现,gs使用c++实现一个实例多个库 单机HA不是支持一主一备,提供高可靠和读扩展,备机最多8套。 主备部署模块说明:OM运维管理模块:提供日常运维、配置管理接口,工具在

[转帖]openGauss 3.0 单节点安装部署

https://cdn.modb.pro/db/568455 openGauss来源于PostgreSQL 9.2.4pg使用c实现,gs使用c++实现一个实例多个库 单机HA不是支持一主一备,提供高可靠和读扩展,备机最多8套。 主备部署模块说明:OM运维管理模块:提供日常运维、配置管理接口,工具在

[转帖]openGauss 3.0 单节点安装部署

https://www.modb.pro/db/568455?utm_source=index_ori openGauss来源于PostgreSQL 9.2.4pg使用c实现,gs使用c++实现一个实例多个库 单机HA不是支持一主一备,提供高可靠和读扩展,备机最多8套。 主备部署模块说明:OM运维管

[转帖]Data studio普通用户采用非SSL的方式连接openGauss

https://cdn.modb.pro/db/43087 关闭SSL认证由于openGauss默认开启SSL认证,且配置认证较为麻烦,个人开发测试并不需要它。因此关闭openGauss的远程用户登录SSL认证模式。1.找到postgresql.conf cd /gaussdb/data/openG

[转帖]你怎么看Data studio普通用户采用非SSL的方式连接openGauss?

https://zhuanlan.zhihu.com/p/365144226 关闭SSL认证 由于openGauss默认开启SSL认证,个人开发测试并不需要它。因此关闭openGauss的远程用户登录SSL认证模式。 1.找到postgresql.conf。 cd /gaussdb/data/ope

[转帖]openGauss每日一练第 5 天 |学习openGauss创建用户、修改用户属性、更改用户权限和删除用户

https://www.modb.pro/db/199037 自己安装的openGauss环境启动openGaussgs_ctl -D /gauss/data/db1/ start登录openGaussgsql -d postgres -p 26000 -r 1.创建用户user1、user2和us

[转帖]openGauss安全

https://cdn.modb.pro/db/585069 随着数字化技术的飞速发展,数字、连接、信号、人工智能充斥着人们工作、生活的各个领域。这些数字化信息被快速转换成数据并存放在各式各样的数据库系统中,而且通过进一步的数据管理与分析产生商业价值。这些有价值的数据或被存放在企业相对封闭的私有网络

[转帖]openGauss_3.1.0 企业版_x86_64安装教程

https://www.cnblogs.com/cjnlll/p/16849620.html 1. 安装环境 VMware、Xshell、Xftp openeuler操作系统 openEuler-20.03-LTS-x86_64安装教程:https://www.cnblogs.com/cjnlll/

[转帖]openGauss兑现承诺:7家伙伴发布3.0发行版,3.1 社区创新版9月面世

https://www.doit.com.cn/p/482334.html openGauss Developer Day(openGauss开发者大会)2022在北京顺利召开。这是openGauss开源社区发起并主办的面向数据库开发者的年度活动。 在大会上,openGauss开源社区理事长江大勇发