sql >> Database >  >> RDS >> PostgreSQL

FIPS inschakelen op PostgreSQL-database

Ik geloof niet dat je Postgres in "FIPS-modus" kunt gebruiken vanwege het gebruik van niet-goedgekeurde cryptografie. Uit een eerdere audit weet ik dat het uitgebreid gebruik maakt van MD5 (zie bijvoorbeeld Postgres-mailinglijst:gebruik van MD5 . In de praktijk gaan er dus veel dingen stuk.

Desalniettemin zijn hier de stappen om het via OpenSSL te proberen. Er zijn drie delen omdat Postgres niet FIPS-bewust is en u enkele wijzigingen in Postgres moet aanbrengen.

Stap één

U moet OpenSSL bouwen voor de configuratie. Dit is een proces in twee stappen. Eerst bouw je de FIPS Object Module; en ten tweede bouw je de FIPS-compatibele bibliotheek.

Om de FIPS Object Module te bouwen, download je eerst `openssl-fips-2.n.n.tar.gz. Na het uitpakken voer je uit:

./configure
make
sudo make install

Nadat u de bovenstaande opdrachten hebt uitgevoerd, wordt de fipscanister bevindt zich in /usr/local/ssl/fips-2.0 . De FIPS-compatibele bibliotheek zal het gebruiken om de FIPS-gevalideerde cryptografie te leveren.

Ten tweede download je openssl-1.n.n.tar.gz . Na het uitpakken voer je uit:

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

Het kritieke deel is de fips optie tijdens configureren.

Nadat u de bovenstaande opdrachten hebt uitgevoerd, heeft u een FIPS-compatibele bibliotheek. De bibliotheek bevindt zich in /usr/local/ssl/lib . Gebruik libcrypto.so en libssl.so zoals altijd.

De FIPS-compatibele bibliotheek gebruikt de fipscanister , zodat u zich geen zorgen hoeft te maken over wat er in /usr/local/ssl/fips-2.0 staat . Het is gewoon een artefact van het bouwen van FIPS Object Module (sommige hand afzien).

Stap twee

Zoek waar Postgres SSL_library_init . aanroept :

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

Open be-secure.c en fe-secure.c en voeg een aanroep toe aan 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();
        ...
    }
    ...
}

Als de aanroep naar FIPS_mode_set slaagt, gebruikt u FIPS-gevalideerde cryptografie. Als het mislukt, gebruikt u nog steeds de cryptografie van OpenSSL, maar niet be FIPS-gevalideerde cryptografie.

Je moet ook de volgende headers toevoegen aan be-secure.c en fe-secure.c :

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

Stap drie

De laatste stap is om ervoor te zorgen dat u de FIPS-compatibele bibliotheek vanaf stap één gebruikt. Doe dat via CFLAGS en 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. Django DB-transacties en impasses

  2. Kan geen verbinding maken met postgres vanaf een externe host

  3. Databasequery C# werkt niet

  4. Verhoogt het zetten van SELECT foo in MySQL de prestaties als foo is geïndexeerd?