承認されていない暗号化を使用しているため、Postgresを「FIPSモード」で実行できるとは思いません。過去の監査から、MD5を多用していることがわかりました(たとえば、 Postgresメーリングリスト:MD5の使用 。そのため、実際には多くのものが壊れてしまいます。
それにもかかわらず、OpenSSLを介してそれを実行するための手順は次のとおりです。 PostgresはFIPSに対応していないため、3つの部分があり、Postgresにいくつかの変更を加える必要があります。
ステップ1
構成用にOpenSSLを構築する必要があります。これは2段階のプロセスです。まず、FIPSオブジェクトモジュールを構築します。次に、FIPS対応ライブラリを構築します。
FIPSオブジェクトモジュールをビルドするには、最初に`openssl-fips-2.n.n.tar.gzをダウンロードします。開梱後、次の手順を実行します。
./configure
make
sudo make install
上記のコマンドを実行した後、fipscanister
/usr/local/ssl/fips-2.0
にあります 。 FIPS対応ライブラリは、これを使用してFIPS検証済み暗号化を提供します。
次に、openssl-1.n.n.tar.gz
をダウンロードします。 。開梱後、次の手順を実行します。
./configure fips shared <other options>
make all
sudo make install
重要な部分はfips
です 構成中のオプション。
上記のコマンドを実行すると、FIPS対応ライブラリが作成されます。ライブラリは/usr/local/ssl/lib
にあります。 。 libcrypto.so
を使用します およびlibssl.so
いつものように。
FIPS対応ライブラリはfipscanister
を使用します 、したがって、/usr/local/ssl/fips-2.0
の内容について心配する必要はありません。 。これは、FIPSオブジェクトモジュールを構築したことによる単なるアーティファクトです(一部の手を放棄します)。
ステップ2
PostgresがSSL_library_init
を呼び出す場所を見つけます :
$ grep -R SSL_library_init *
...
src/backend/libpq/be-secure.c: SSL_library_init();
src/interfaces/libpq/fe-secure.c: SSL_library_init();
be-secure.c
を開きます およびfe-secure.c
、FIPS_mode_set
への呼び出しを追加します 。
/* be-secure.c, near line 725 */
static void
initialize_SSL(void)
{
struct stat buf;
STACK_OF(X509_NAME) *root_cert_list = NULL;
#if defined(OPENSSL_FIPS)
int rc;
rc = FIPS_mode();
if(rc == 0)
{
rc = FIPS_mode_set(1);
assert(1 == rc);
}
#endif
if (!SSL_context)
{
#if SSLEAY_VERSION_NUMBER >= 0x0907000L
OPENSSL_config(NULL);
#endif
SSL_library_init();
SSL_load_error_strings();
...
}
...
}
FIPS_mode_set
の呼び出しの場合 成功すると、FIPS検証済み暗号化を使用することになります。失敗した場合でも、OpenSSLの暗号化を使用しますが、使用しません。 FIPS検証済みの暗号化である。
また、次のヘッダーをbe-secure.c
に追加する必要があります。 およびfe-secure.c
:
#include <openssl/opensslconf.h>
#include <openssl/fips.h>
ステップ3
最後のステップは、ステップ1からFIPS対応ライブラリを使用していることを確認することです。 CFLAGS
を介してそれを行います およびLDFLAGS
:
cd postgres-9.3.2
export CFLAGS="-I/usr/local/ssl/include"
export LDFLAGS="-L/usr/local/ssl/lib"
./config --with-openssl <other options>
...