如何在 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 +++
我无法找到如何在 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 +++