PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Aktivieren Sie FIPS in der PostgreSQL-Datenbank

Ich glaube nicht, dass Sie Postgres im "FIPS-Modus" ausführen können, da nicht genehmigte Kryptografie verwendet wird. Aus einer früheren Prüfung weiß ich, dass MD5 umfassend genutzt wird (siehe zum Beispiel Postgres-Mailingliste:Verwendung von MD5 . In der Praxis wird also vieles kaputt gehen.

Ungeachtet dessen sind hier die Schritte, um es über OpenSSL zu versuchen. Es gibt drei Teile, da Postgres nicht FIPS-fähig ist und Sie einige Änderungen an Postgres vornehmen müssen.

Schritt Eins

Sie müssen OpenSSL für die Konfiguration erstellen. Dies ist ein zweistufiger Prozess. Zuerst erstellen Sie das FIPS-Objektmodul; und zweitens erstellen Sie die FIPS-fähige Bibliothek.

Um das FIPS-Objektmodul zu erstellen, laden Sie zunächst „openssl-fips-2.n.n.tar.gz“ herunter. Nach dem Auspacken führen Sie aus:

./configure
make
sudo make install

Nachdem Sie die obigen Befehle ausgeführt haben, wird der fipscanister befindet sich in /usr/local/ssl/fips-2.0 . Die FIPS-fähige Bibliothek wird es verwenden, um die FIPS-validierte Kryptografie bereitzustellen.

Zweitens laden Sie openssl-1.n.n.tar.gz herunter . Nach dem Auspacken führen Sie aus:

./configure fips shared <other options>
make all
sudo make install

Der kritische Teil ist der fips Option während der Konfiguration.

Nachdem Sie die obigen Befehle ausgeführt haben, verfügen Sie über eine FIPS-fähige Bibliothek. Die Bibliothek befindet sich in /usr/local/ssl/lib . Verwenden Sie libcrypto.so und libssl.so wie immer.

Die FIPS-fähige Bibliothek verwendet den fipscanister , sodass Sie sich keine Gedanken über den Inhalt von /usr/local/ssl/fips-2.0 machen müssen . Es ist nur ein Artefakt aus der Erstellung des FIPS-Objektmoduls (einige Handbewegungen).

Schritt Zwei

Finden Sie heraus, wo Postgres SSL_library_init aufruft :

$ grep -R SSL_library_init *
...
src/backend/libpq/be-secure.c:      SSL_library_init();
src/interfaces/libpq/fe-secure.c:           SSL_library_init();

Öffnen Sie be-secure.c und fe-secure.c , und fügen Sie einen Aufruf zu FIPS_mode_set hinzu .

/* 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();
        ...
    }
    ...
}

Wenn der Aufruf von FIPS_mode_set erfolgreich ist, verwenden Sie FIPS-validierte Kryptografie. Wenn dies fehlschlägt, verwenden Sie immer noch die Kryptografie von OpenSSL, aber nicht FIPS-validierte Kryptografie sein.

Sie müssen auch die folgenden Header zu be-secure.c hinzufügen und fe-secure.c :

#include <openssl/opensslconf.h>
#include <openssl/fips.h>

Schritt Drei

Der letzte Schritt besteht darin, sicherzustellen, dass Sie die FIPS-fähige Bibliothek von Schritt eins an verwenden. Mach das über CFLAGS und 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>
...