我正在使用FIPS和OpenSSL库。当我不想要FIPS时,由于FIPS自检,系统性能会下降。由于性能问题,我希望有以下解决方案: -
当我启用FIPS时,它会触及/ tmp目录中的文件&重新启动系统。 现在,基于文件的存在,我想要加载LibA或LibB。 在这里,LibA和& LibB是使用FIPS或不使用FIPS的openssl库。
有可能吗?如果是,怎么样? 还有其他更好的解决方案吗?
注意: - 平台是LINUX。
答案 0 :(得分: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目录中的文件&重新启动系统
研究如何编写临时文件以及如何以编程方式重新启动系统。如果你遇到麻烦,可以提出一个新问题。