如何在 PostgreSQL 中运行 TLS 回归测试

概述

本文将分享一个简单的步骤,介绍如何在 PostgreSQL 中运行 SSL/TLS 回归测试。

Postgres 回归测试

每当我们想要添加新功能或进行修复时,都应该运行 PostgreSQL 提供的测试,以确保没有损坏。如果新功能或修复没有相应的测试,我们应该考虑添加一些,以确保在未来进行其他更改时不会出现问题。PostgreSQL 提供了一份全面的文档,解释了所有可用的测试。

例如,如果您想运行快速回归测试以检查任何"核心"功能是否可能存在问题,可以在构建树的临时安装中运行 make check,或者针对正在运行的 PostgreSQL 服务器运行 make installcheckmake checkmake installcheck 仅会测试 PostgreSQL 服务器的内置功能。要对已选择构建的模块运行所有测试,包括核心测试,您需要运行 make check-worldmake installcheck-world,分别对应于构建树中的临时安装或正在运行的 PostgreSQL 服务器。然而,某些功能在运行 make check-worldmake installcheck-world 时仍然不会被测试,例如与安全相关的功能、SSL、Kerberos 等。原因之一是这些测试用例需要一些特殊设置。要对这些功能运行回归测试,如文档所述,您需要运行类似 make check-world PG_TEST_EXTRA='kerberos ldap ssl load_balance' 的测试。

运行 SSL/TLS 回归测试

要运行与 SSL/TLS 相关功能的回归测试,首先需要编译启用了 SSL 库的 PostgreSQL。例如,运行以下命令将使用 OpenSSL 库编译 PostgreSQL:

bash 复制代码
git clone https://github.com/postgres/postgres.git
cd postgres
./configure --prefix=/tmp/pgapp --enable-tap-tests CC="gcc -std=gnu99" --with-openssl
make -j
make check-world

如果 make check-world 没问题,那么您可以通过检查 src/test/ssl/tmp_check/log 中的日志来确认是否已执行 SSL/TLS 回归测试。

bash 复制代码
$ cat *
[11:27:05.488](0.021s) 1..0 # SKIP Potentially unsafe test SSL not enabled in PG_TEST_EXTRA
[11:27:05.584](0.011s) 1..0 # SKIP Potentially unsafe test SSL not enabled in PG_TEST_EXTRA
[11:27:05.671](0.011s) 1..0 # SKIP Potentially unsafe test SSL not enabled in PG_TEST_EXTRA

日志显示,所有三个 SSL/TLS 回归测试(001_ssltests.pl、002_scram.pl 和 003_sslinfo.pl)都已被跳过。

换句话说,如果您的修复与 SSL/TLS 相关,但您仅在修复上运行 make check-world,则可能会破坏某些 SSL/TLS 功能。要使用现有的回归测试用例测试与 SSL/TLS 相关的功能,您需要使用以下命令运行 SSL/TLS 测试:

bash 复制代码
cd src/test/ssl
make check PG_TEST_EXTRA=ssl

预期结果类似于以下内容:

bash 复制代码
# +++ tap check in src/test/ssl +++
t/001_ssltests.pl .. ok     
t/002_scram.pl ..... ok    
t/003_sslinfo.pl ... ok    
All tests successful.
Files=3, Tests=247, 11 wallclock secs ( 0.05 usr  0.00 sys +  2.01 cusr  1.59 csys =  3.65 CPU)
Result: PASS

然后,您应该在 src/test/ssl/tmp_check/log 中看到如下日志,包含更多详细信息。

bash 复制代码
$ ls -l
total 164
-rw------- 1 david david 82348 Apr 19 11:39 001_ssltests_primary.log
-rw------- 1 david david 12408 Apr 19 11:39 002_scram_primary.log
-rw------- 1 david david 16402 Apr 19 11:39 003_sslinfo_primary.log
-rw-rw-r-- 1 david david 30451 Apr 19 11:39 regress_log_001_ssltests
-rw-rw-r-- 1 david david  4921 Apr 19 11:39 regress_log_002_scram
-rw-rw-r-- 1 david david  3880 Apr 19 11:39 regress_log_003_sslinfo

如果仔细查看日志,您可能会发现许多消息包含 certificate,如下所示。

bash 复制代码
$ cat tmp_check/log/* | grep certificate
...
[11:39:27.633](0.000s) ok 31 - cert root file that contains two certificates, order 2: no stderr
[11:39:27.717](0.027s) ok 36 - connect with sslcertmode=require fails without a client certificate
[11:39:27.717](0.000s) ok 37 - connect with sslcertmode=require fails without a client certificate: matches
[11:39:27.882](0.028s) ok 48 - mismatch between host name and server certificate sslmode=require
...

如何生成 SSL/TLS 证书

然后,您可能会有疑问,比如:"证书来自哪里?"以及"证书是如何生成的?"

实际上,所有证书都是通过 src/test/ssl 目录下的 Makefile 生成的,并作为测试用例的一部分提交到 PostgreSQL。通常情况下,除非您有一些需要新证书或不同证书的更改,否则不需要重新生成它们。然后,您可以运行以下命令:

bash 复制代码
make sslfiles-clean
make sslfiles

之后,如果您运行 git status,您应该会发现 src/test/ssl/ssl 目录下的所有文件都已被更改。这时,如果您运行之前的命令 make check PG_TEST_EXTRA=ssl,那么它应该会使用新生成的证书进行回归测试。我要在这里提到证书的原因是,证书在 SSL/TLS 回归测试中扮演着非常重要的角色。

总结

本文描述了运行 SSL/TLS 相关回归测试的简单过程。您可以参考此过程对 Kerberos、LDAP 等进行类似的回归测试。

本文由博客一文多发平台 OpenWrite 发布!

相关推荐
宇钶宇夕24 分钟前
EPLAN 电气制图:建立自己的部件库,添加部件-加SQL Server安装教程(三)上
运维·服务器·数据库·程序人生·自动化
爱可生开源社区1 小时前
SQLShift 重磅更新:支持 SQL Server 存储过程转换至 GaussDB!
数据库
贾修行1 小时前
SQL Server 空间函数从入门到精通:原理、实战与多数据库性能对比
数据库·sqlserver
傲祥Ax1 小时前
Redis总结
数据库·redis·redis重点总结
一屉大大大花卷2 小时前
初识Neo4j之入门介绍(一)
数据库·neo4j
周胡杰3 小时前
鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
前端·数据库·华为·harmonyos·鸿蒙·鸿蒙系统
wkj0013 小时前
navicate如何设置数据库引擎
数据库·mysql
赵渝强老师3 小时前
【赵渝强老师】Oracle RMAN的目录数据库
数据库·oracle
暖暖木头3 小时前
Oracle注释详解
数据库·oracle
御控工业物联网3 小时前
御控网关如何实现MQTT、MODBUS、OPCUA、SQL、HTTP之间协议转换
数据库·sql·http