【问题标题】:How to dynamically use FIPS and non-FIPS openssl library based on flags?如何根据标志动态使用 FIPS 和非 FIPS openssl 库?
【发布时间】:2017-01-29 13:06:26
【问题描述】:

我将 FIPS 与 OpenSSL 库一起使用。当我不想要 FIPS 时,系统性能会因 FIPS 自检而下降。由于性能问题,我希望有以下解决方案:-

  1. LibA -> OpenSSL + FIPS
  2. LibB -> 仅限 OpenSLL

当我启用 FIPS 时,它会触及 /tmp 目录中的文件并重新启动系统。 现在,基于文件的存在,我想加载 LibA 或 LibB。 在这里,LibA 和 LibB 都是带有或不带有 FIPS 的 openssl 库。

有可能吗?如果是,如何? 还有其他更好的解决方案吗?

注意:- 平台是 LINUX。

【问题讨论】:

    标签: openssl shared-libraries fips


    【解决方案1】:

    我想要以下解决方案:

    • LibA -> OpenSSL + FIPS
    • LibB -> 仅限 OpenSLL

    要启用或禁用 FIPS,请调用 FIPS_mode_set。如果库支持 FIPS,FIPS_mode_set(1) 应该启用该模式,而 FIPS_mode_set(0) 禁用 FIPS 算法。

    我认为在你想要的用法中,当 libA 被加载时,它会检查临时文件,如果文件存在,则只调用 FIPS_mode_set(1)

    如果您针对支持 FIPS 和不支持 FIPS 进行编译和链接,则应使用 OPENSSL_FIPS 保护代码。

    所以可能是这样的:

    #ifdef OPENSSL_FIPS
    
    int mode, ret = 0; unsigned long err = 0;
    mode = FIPS_mode();
    
    if (temp_file_exsts && mode == 0)
    {      
        ret = FIPS_mode_set(1 /*on*/);
        err = ERR_get_error();
    }
    else if (temp_file_exsts && mode != 0))
    {
        ret = FIPS_mode_set(0 /*off*/);
        err = ERR_get_error();
    }
    else
    {
        printf("Who knows...");  
    }
    
    if(ret != 1)
    {
        printf("FIPS_mode_set failed: %lx.", err);    
    }
    #endif
    

    如何动态使用 FIPS 和非 FIPS

    您使用dlopen 和朋友。您必须执行一些技巧来确保libA 始终在libB 之前加载/运行时链接。如果遇到问题,请研究并提出一个新问题。


    它触及 /tmp 目录中的文件并重新启动系统

    研究如何编写临时文件以及如何以编程方式重新启动系统。如果您遇到问题,请提出新问题。

    【讨论】:

    • 我能够完成第一部分和最后一部分。我在使用基于 fips 标志的 FIPS 和非 FIPS 库时被阻止。让我试试你的建议。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 2012-06-20
    相关资源
    最近更新 更多