【问题标题】:how to set the min and max protocol versions in openssl library如何在 openssl 库中设置最小和最大协议版本
【发布时间】:2021-11-27 06:16:23
【问题描述】:

我找不到如何在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”上下文结构将这两个值设为零。看起来这些必须设置在库中的某个位置。

ctx.min_proto_ver, ctx.max_proto_ver

在我的情况下,以上两个都显示零值。

SSL_CTX_get_min_proto_version(ctx);
SSL_CTX_get_max_proto_version(ctx);

在库中哪里可以设置这些版本值?

【问题讨论】:

    标签: c struct openssl


    【解决方案1】:

    很有可能

    • 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 +++
    

    【讨论】:

    • 我应该在 sysdefaulttest.c 文件中使用这些宏还是应该在其他地方使用?
    • 我认为通常你会使用make TESTS="test_sysdefault" test 运行这个测试,在这种情况下你不应该做任何事情,因为这将运行一个90-test_sysdefault.t 配方,它设置OPENSSL_CONF 环境变量到sysdefault.cnf,这个配置文件将最小值和最大值设置为1.2。
    • 如果你直接运行测试,你也可以这样做:OPENSSL_CONF=sysdefault.cnf ./sysdefaulttest.
    • 您能告诉我在哪里可以更详细地了解您在上述两个 cmets 中提到的过程吗?我无法成功运行这些..必须在这里遗漏一些细节..
    • 对不起,不知道。它主要是在寻找名称或内容中包含“sysdefault”的文件,可能需要一些谷歌搜索。我已经更新了答案以包含评论中的信息。我还添加了关于“strace”的部分,可以用来确认是否打开了预期的配置文件。
    猜你喜欢
    • 1970-01-01
    • 2020-06-29
    • 2015-03-21
    • 1970-01-01
    • 2021-12-30
    • 2021-09-15
    • 1970-01-01
    • 2019-02-10
    • 2014-01-15
    相关资源
    最近更新 更多