很有可能
-
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:
在 OpenSSL 1.1.0 中添加了 setter 函数。在 OpenSSL 1.1.1 中添加了 getter 函数。
编辑
但是,在测试中,您不必做任何事情。构建库后,您将像这样运行测试:
]$ 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 +++