如何在 openssl 库中设置最小和最大协议版本

how to set the min and max protocol versions in openssl library

我无法找到如何在 this 库中设置最小和最大协议版本:

有一个函数: static int test_func(void) 在测试文件中

sysdefaulttest.c

使用最小和最大协议版本:

static int test_func(void) {
if (!TEST_int_eq(SSL_CTX_get_min_proto_version(ctx), TLS1_2_VERSION)
    && !TEST_int_eq(SSL_CTX_get_max_proto_version(ctx), TLS1_2_VERSION)) {
    TEST_info("min/max version setting incorrect");
    return 0;
}
return 1;}

这个测试在我的案例中失败了。 'ctx' 上下文结构在我的例子中将这 2 个值设为零。看起来这些必须在库中的某个地方设置。

ctx.min_proto_ver, ctx.max_proto_ver

以上两个在我的例子中都显示零值。

SSL_CTX_get_min_proto_version(ctx);
SSL_CTX_get_max_proto_version(ctx);

我可以在库中的什么地方设置这些版本值?

最有可能与

  • SSL_CTX_set_min_proto_version
  • SSL_CTX_set_max_proto_version

函数(https://github.com/openssl/openssl/blob/master/include/openssl/ssl.h.in#L1451)。

来自 docs:

The setter functions were added in OpenSSL 1.1.0. The getter functions were added in OpenSSL 1.1.1.


编辑 但是,在测试中,您不必做任何事情。构建库后,您将 运行 测试如下:

]$ make TESTS="test_sysdefault" test
...
90-test_sysdefault.t .. ok
All tests successful.
Files=1, Tests=1,  0 wallclock secs ( 0.00 usr  0.00 sys +  0.11 cusr  0.01 csys =  0.12 CPU)
Result: PASS

这将从 test/recipes/90-test_sysdefault.t 执行测试配方,它将 OPENSSL_CONF 环境变量设置为 test/sysdefault.cnf。此配置文件将协议版本设置为 1.2:

]$ cat ./test/sysdefault.cnf
# Configuration file to test system default SSL configuration
...
[ssl_default_sect]
MaxProtocol = TLSv1.2
MinProtocol = TLSv1.2

并且测试应加载此文件:

int global_init(void)
{
    if (!OPENSSL_init_ssl(OPENSSL_INIT_ENGINE_ALL_BUILTIN
                          | OPENSSL_INIT_LOAD_CONFIG, NULL))

知道了,可以直接执行测试:

]$ LD_LIBRARY_PATH=. OPENSSL_CONF=test/sysdefault.cnf ./test/sysdefaulttest
1..1
ok 1 - test_func

(这里我不得不额外使用LD_LIBRARY_PATH因为我只构建了库并没有安装它)

如果我们要验证sysdefault.cnf是否真的打开了,可以使用strace:

]$ LD_LIBRARY_PATH=. OPENSSL_CONF=test/sysdefault.cnf strace -f -e trace=/open ./test/sysdefaulttest
openat(AT_FDCWD, "./tls/haswell/x86_64/libssl.so.3", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
...
openat(AT_FDCWD, "test/sysdefault.cnf", O_RDONLY) = 3
1..1
ok 1 - test_func
+++ exited with 0 +++