sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLデータベースでFIPSを有効にする

    承認されていない暗号化を使用しているため、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.cFIPS_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>
    ...
    


    1. SQLiteINTERSECTオペレーター

    2. PostgreSQLの複数列の部分インデックスに日時制約を追加する

    3. YiiフレームワークでのPHP非同期メソッド呼び出し

    4. 現在の構成変数を表示するためのmysqlコマンド