2016-09-21 62 views
1

我正在使用FIPS以及OpenSSL庫。當我不需要FIPS時,由於FIPS自檢,系統性能下降。由於性能問題,我想有以下解決方案: -如何根據標誌動態使用FIPS和非FIPS openssl庫?

  1. 力霸 - > OpenSSL的+ FIPS
  2. LibB - > OpenSLL只有

當我啓用FIPS,倒是在文件/ tmp目錄&重新啓動系統。 現在,基於文件的存在,我想要加載LibA或LibB。 在這裏,LibA & LibB都是openssl庫,或者帶有FIPS或不帶。

可以做到嗎?如果是,如何? 還有其他更好的解決方案嗎?

注意: - 平臺是LINUX。

回答

1

我想有以下解決方案:

  • 力霸 - > OpenSSL的+ FIPS
  • LibB - > OpenSLL只有

要啓用或禁用FIPS,你叫FIPS_mode_setFIPS_mode_set(1)應啓用該模式,前提是該庫具有FIPS功能,而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目錄下的文件&重啓系統

研究如何寫一個臨時文件,以及如何以編程方式重新啓動系統。如果遇到問題,請提出一個新問題。

+0

我能夠實現第一和最後一部分。我在使用基於fips標誌的FIPS和非FIPS庫時被封鎖。讓我試試你的建議。謝謝。 – 0x07FC