sql >> Databáze >  >> RDS >> PostgreSQL

Povolit FIPS na databázi PostgreSQL

Nevěřím, že můžete spustit Postgres v „režimu FIPS“, protože používá neschválenou kryptografii. Z minulého auditu vím, že široce využívá MD5 (viz například Poštovní seznam Postgres:Použití MD5 . Takže spousta věcí se v praxi pokazí.

Bez ohledu na to, zde jsou kroky, jak to zkusit udělat přes OpenSSL. Jsou tři části, protože Postgres nepodporuje FIPS a je potřeba provést nějaké úpravy Postgresu.

Krok jedna

Pro konfiguraci musíte sestavit OpenSSL. Toto je dvoukrokový proces. Nejprve sestavíte objektový modul FIPS; a za druhé vytvoříte FIPS Capable Library.

Chcete-li sestavit objektový modul FIPS, nejprve si stáhněte `openssl-fips-2.n.n.tar.gz. Po rozbalení provedete:

./configure
make
sudo make install

Po spuštění výše uvedených příkazů fipscanister bude umístěn v /usr/local/ssl/fips-2.0 . Knihovna FIPS Capable Library jej použije k poskytování ověřené kryptografie FIPS.

Za druhé si stáhnete openssl-1.n.n.tar.gz . Po rozbalení provedete:

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

Kritická část je fips možnost během konfigurace.

Po spuštění výše uvedených příkazů budete mít FIPS Capable Library. Knihovna bude umístěna v /usr/local/ssl/lib . Použijte libcrypto.so a libssl.so jako vždy.

Knihovna FIPS Capable Library používá fipscanister , takže se nemusíte starat o to, co je v /usr/local/ssl/fips-2.0 . Je to jen artefakt ze stavby FIPS Object Module (nějaké upuštění od ruky).

Krok 2

Najděte, kam Postgres volá 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();

Otevřete be-secure.c a fe-secure.c a přidejte volání do 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();
        ...
    }
    ...
}

Pokud je volání FIPS_mode_set uspěje, pak budete používat kryptografii ověřenou FIPS. Pokud selže, budete stále používat kryptografii OpenSSL, ale nebude být kryptografie ověřená FIPS.

Do be-secure.c budete také muset přidat následující záhlaví a fe-secure.c :

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

Krok tři

Posledním krokem je ujistit se, že používáte FIPS Capable Library od prvního kroku. Udělejte to pomocí CFLAGS a 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. Jak zrušit a znovu naplnit databáze mysql?

  2. Pythonská MySQLdb nemůže najít libmysqlclient.dylib s Homebrewed MySQL

  3. Jak získat dvě návratové hodnoty z uložené procedury Oracle

  4. ztráta měřítka při provádění výpočtu