2016-09-21 11 views
1

私はOpenSSLライブラリと共にFIPSを使用しています。私がFIPSを必要としないとき、FIPS自己テストのためにシステム性能が低下します。パフォーマンスの問題のため、私は解決策次のようにしたい: -フラグに基づいてFIPSとnon-FIPS opensslライブラリを動的に使用する方法はありますか?

  1. LIBA - >のOpenSSL + FIPS
  2. LibB - > OpenSLLだけ
  3. 私はFIPSを有効にすると、それは内のファイルに触れる

/tmpディレクトリ&は、システムを再起動します。 ファイルの存在に基づいて、LibAまたはLibBのいずれかをロードします。 ここでは、LibA & LibBは両方ともFIPSを使用して、または使用しないでopensslライブラリです。

できますか?はいの場合、どのように? 他にも優れたソリューションがありますか?

注: - プラットフォームはLINUXです。私は、次の解決策が欲しい

答えて

1

  • LIBAを - >のOpenSSL + FIPS
  • LibB - > OpenSLLだけ

FIPSを有効または無効にするには、FIPS_mode_setを呼び出します。 FIPS_mode_set(1)は、ライブラリがFIPS対応の場合はモードを有効にし、FIPS_mode_set(0)はFIPSアルゴリズムを無効にする必要があります。

libAがロードされているときには、一時ファイルをチェックし、そのファイルが存在する場合はFIPS_mode_set(1)を呼び出します。

コンパイルしてFIPS対応でFIPS対応でない場合は、OPENSSL_FIPSでコードを保護する必要があります。

そのため、おそらくのようなもの:

動的にあなたが dlopenや友人を使用してFIPSおよび非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 

libAが常にロード/ランタイムリンクであることを確認するには、libBの前にいくつかのトリックを実行する必要があります。あなたが問題を抱えている場合は、それを調べて新しい質問をしてください。


は、それは一時ファイルとどのようにプログラムでシステムを再起動するの書き方をシステム

研究にリブートし&/tmpディレクトリ内のファイルに触れます。問題がある場合は新しい質問をしてください。

+0

私は最初と最後の部分を達成することができます。 FIPSとFIPS以外のライブラリを使用している間、私はブロックされました。あなたの提案を試してみましょう。ありがとう。 – 0x07FC

関連する問題