sql >> Databasteknik >  >> RDS >> PostgreSQL

Aktivera FIPS på PostgreSQL-databas

Jag tror inte att du kan köra Postgres i "FIPS-läge" på grund av dess användning av icke-godkänd kryptografi. Från en tidigare revision vet jag att den använder MD5 i stor utsträckning (se till exempel Postgres e-postlista:Användning av MD5 . Så massor av saker kommer att gå sönder i praktiken.

Hur som helst, här är stegen för att försöka göra det via OpenSSL. Det finns tre delar eftersom Postgres inte är FIPS-medvetet, och du måste göra några ändringar i Postgres.

Steg ett

Du måste bygga OpenSSL för konfigurationen. Detta är en tvåstegsprocess. Först bygger du FIPS-objektmodulen; och för det andra bygger du FIPS Capable Library.

För att bygga FIPS-objektmodulen laddar du först ner `openssl-fips-2.n.n.tar.gz. Efter uppackning utför du:

./configure
make
sudo make install

När du har kört ovanstående kommandon, fipscanister kommer att finnas i /usr/local/ssl/fips-2.0 . FIPS Capable Library kommer att använda det för att tillhandahålla FIPS-validerad kryptografi.

För det andra laddar du ner openssl-1.n.n.tar.gz . Efter uppackning utför du:

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

Den kritiska delen är fips alternativ under konfigurering.

När du har kört ovanstående kommandon kommer du att ha ett FIPS-kapabelt bibliotek. Biblioteket kommer att finnas i /usr/local/ssl/lib . Använd libcrypto.so och libssl.so som alltid.

FIPS Capable Library använder fipscanister , så du behöver inte oroa dig för vad som finns i /usr/local/ssl/fips-2.0 . Det är bara en artefakt från att bygga FIPS Object Module (någon hand som avstår).

Steg två

Hitta var Postgres anropar 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();

Öppna be-secure.c och fe-secure.c , och lägg till ett anrop till 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();
        ...
    }
    ...
}

Om anropet till FIPS_mode_set lyckas, kommer du att använda FIPS-validerad kryptografi. Om det misslyckas kommer du fortfarande att använda OpenSSL:s kryptografi, men det kommer inte vara FIPS Validerad kryptografi.

Du måste också lägga till följande rubriker i be-secure.c och fe-secure.c :

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

Steg tre

Det sista steget är att se till att du använder FIPS Capable Library från steg ett. Gör det via CFLAGS och 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. MySQL Välj ID:n som förekommer på olika rader med flera specifika värden för en kolumn

  2. MariaDB Backup &PostgreSQL i molnet - ClusterControl Release 1.6.1

  3. hur kan jag få en mängd nyligen infogade post-ID?

  4. Användning av kolumn av BLOB-typ i Oracle APEX