暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

概述

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

Postgres 回归测试

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

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

运行 SSL/TLS 回归测试

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

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 回归测试。

$ cat *
[11:27:05.488](0.021s "11:27:05.488") 1..0 # SKIP Potentially unsafe test SSL not enabled in PG_TEST_EXTRA
[11:27:05.584](0.011s "11:27:05.584") 1..0 # SKIP Potentially unsafe test SSL not enabled in PG_TEST_EXTRA
[11:27:05.671](0.011s "11:27:05.671") 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 测试:

cd src/test/ssl
make check PG_TEST_EXTRA=ssl

复制

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

# +++ 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
中看到如下日志,包含更多详细信息。

$ 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
,如下所示。

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

复制

如何生成 SSL/TLS 证书

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

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

make sslfiles-clean
make sslfiles

复制

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

总结

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

引用链接

[1]

文档: https://www.postgresql.org/docs/current/regress-run.html

IvorySQL 社区活动火热进行中

IvorySQL 社区诚挚的邀请各位用户参与👉IvorySQL 案例征集活动

只要参与就有奖励哦,欢迎您积极参与!

关注公众号,了解更多社区动态


- 推荐阅读 -

版本发布| IvorySQL 4.4 发布

如何利用 PostgreSQL 的 JSONB API 作为扩展的轻量级 JSON 解析器

IvorySQL v4 逻辑复制槽同步功能解析:高可用场景下的数据连续性保障

表访问方法:PostgreSQL 中数据更新的处理方式

「2024 年度技术精华盘点」IvorySQL & PostgreSQL 技术干货全解析!

版本发布 | IvorySQL 4.2 发布

IvorySQL 4.0 之 Invisible Column 功能解析

从 PostgreSQL 升级至 IvorySQL 4.0

IvorySQL 4.0 之兼容 Oracle 包功能设计思路解读

IvorySQL 升级指南:从 3.x 到 4.0 的平滑过渡

IvorySQL 4.0 发布:全面支持 PostgreSQL 17

- 关于 IvorySQL -
lvorySQL 是由瀚高股份主导研发的一款开源的兼容 Oracle 的 PostgreSQL。IvorySQL 与 PostgreSQL 国际社区紧密合作,保持与最新 PG 版本内核同步,为用户提供便捷的升级体验。基于双 Parser 架构设计,100% 与原生 PostgreSQL 兼容,支持丰富的 PostgreSQL 周边工具和扩展,并根据用户需求提供定制化工具。同时,IvorySQL 提供更全面灵活的 Oracle 兼容功能,具备高度的 SQL 和 PL/SQL 兼容性能够为企业构建更加高效、稳定和灵活的数据库解决方案。
官网:https://www.ivorysql.org
GitHub(欢迎点击 star 收藏哦):https://github.com/IvorySQL/IvorySQL
社群:微信搜索“ivorysql_official” 添加小助理进群


文章转载自IvorySQL开源数据库社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论