Jeg tror ikke, du kan køre Postgres i "FIPS-tilstand" på grund af dets brug af ikke-godkendt kryptografi. Fra en tidligere revision ved jeg, at den gør meget brug af MD5 (se f.eks. Postgres Mailing List:Brug af MD5 . Så mange ting går i stykker i praksis.
Uanset, her er trinene til at prøve at gøre det via OpenSSL. Der er tre dele, fordi Postgres ikke er FIPS-bevidst, og du skal lave nogle ændringer til Postgres.
Trin 1
Du skal bygge OpenSSL til konfigurationen. Dette er en to-trins proces. Først bygger du FIPS-objektmodulet; og for det andet bygger du FIPS Capable Library.
For at bygge FIPS-objektmodulet skal du først downloade `openssl-fips-2.n.n.tar.gz. Efter udpakning udfører du:
./configure
make
sudo make install
Når du har kørt ovenstående kommandoer, vil fipscanister
vil være placeret i /usr/local/ssl/fips-2.0
. FIPS Capable Library vil bruge det til at levere FIPS-valideret kryptografi.
For det andet downloader du openssl-1.n.n.tar.gz
. Efter udpakning udfører du:
./configure fips shared <other options>
make all
sudo make install
Den kritiske del er fips
mulighed under konfiguration.
Når du har kørt ovenstående kommandoer, vil du have et FIPS-kapabelt bibliotek. Biblioteket vil være placeret i /usr/local/ssl/lib
. Brug libcrypto.so
og libssl.so
som altid.
FIPS Capable Library bruger fipscanister
, så du behøver ikke bekymre dig om, hvad der er i /usr/local/ssl/fips-2.0
. Det er kun en artefakt fra bygningen af FIPS Object Module (noget afkald på hånden).
Trin to
Find, hvor Postgres kalder 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();
Åbn be-secure.c
og fe-secure.c
, og tilføj et opkald til 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();
...
}
...
}
Hvis opkaldet til FIPS_mode_set
lykkes, så vil du bruge FIPS Valideret kryptografi. Hvis det mislykkes, vil du stadig bruge OpenSSL's kryptografi, men det vil ikke være FIPS Valideret kryptografi.
Du skal også tilføje følgende overskrifter til be-secure.c
og fe-secure.c
:
#include <openssl/opensslconf.h>
#include <openssl/fips.h>
Trin tre
Det sidste trin er at sikre, at du bruger FIPS Capable Library fra trin et. Gør det via CFLAGS
og 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>
...