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>
...