Ich glaube nicht, dass Sie Postgres im "FIPS-Modus" ausführen können, da nicht genehmigte Kryptografie verwendet wird. Aus einer früheren Prüfung weiß ich, dass MD5 umfassend genutzt wird (siehe zum Beispiel Postgres-Mailingliste:Verwendung von MD5 . In der Praxis wird also vieles kaputt gehen.
Ungeachtet dessen sind hier die Schritte, um es über OpenSSL zu versuchen. Es gibt drei Teile, da Postgres nicht FIPS-fähig ist und Sie einige Änderungen an Postgres vornehmen müssen.
Schritt Eins
Sie müssen OpenSSL für die Konfiguration erstellen. Dies ist ein zweistufiger Prozess. Zuerst erstellen Sie das FIPS-Objektmodul; und zweitens erstellen Sie die FIPS-fähige Bibliothek.
Um das FIPS-Objektmodul zu erstellen, laden Sie zunächst „openssl-fips-2.n.n.tar.gz“ herunter. Nach dem Auspacken führen Sie aus:
./configure
make
sudo make install
Nachdem Sie die obigen Befehle ausgeführt haben, wird der fipscanister
befindet sich in /usr/local/ssl/fips-2.0
. Die FIPS-fähige Bibliothek wird es verwenden, um die FIPS-validierte Kryptografie bereitzustellen.
Zweitens laden Sie openssl-1.n.n.tar.gz
herunter . Nach dem Auspacken führen Sie aus:
./configure fips shared <other options>
make all
sudo make install
Der kritische Teil ist der fips
Option während der Konfiguration.
Nachdem Sie die obigen Befehle ausgeführt haben, verfügen Sie über eine FIPS-fähige Bibliothek. Die Bibliothek befindet sich in /usr/local/ssl/lib
. Verwenden Sie libcrypto.so
und libssl.so
wie immer.
Die FIPS-fähige Bibliothek verwendet den fipscanister
, sodass Sie sich keine Gedanken über den Inhalt von /usr/local/ssl/fips-2.0
machen müssen . Es ist nur ein Artefakt aus der Erstellung des FIPS-Objektmoduls (einige Handbewegungen).
Schritt Zwei
Finden Sie heraus, wo Postgres SSL_library_init
aufruft :
$ grep -R SSL_library_init *
...
src/backend/libpq/be-secure.c: SSL_library_init();
src/interfaces/libpq/fe-secure.c: SSL_library_init();
Öffnen Sie be-secure.c
und fe-secure.c
, und fügen Sie einen Aufruf zu FIPS_mode_set
hinzu .
/* 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();
...
}
...
}
Wenn der Aufruf von FIPS_mode_set
erfolgreich ist, verwenden Sie FIPS-validierte Kryptografie. Wenn dies fehlschlägt, verwenden Sie immer noch die Kryptografie von OpenSSL, aber nicht FIPS-validierte Kryptografie sein.
Sie müssen auch die folgenden Header zu be-secure.c
hinzufügen und fe-secure.c
:
#include <openssl/opensslconf.h>
#include <openssl/fips.h>
Schritt Drei
Der letzte Schritt besteht darin, sicherzustellen, dass Sie die FIPS-fähige Bibliothek von Schritt eins an verwenden. Mach das über CFLAGS
und 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>
...