मुझे विश्वास नहीं है कि आप गैर-अनुमोदित क्रिप्टोग्राफी के उपयोग के कारण "FIPS मोड" में Postgres चला सकते हैं। पिछले ऑडिट से, मुझे पता है कि यह MD5 का व्यापक उपयोग करता है (उदाहरण के लिए देखें, पोस्टग्रेज मेलिंग लिस्ट:MD5 का उपयोग . अभ्यास में बहुत सारी चीज़ें टूटने वाली हैं।
इसके बावजूद, यहां ओपनएसएसएल के माध्यम से प्रयास करने और इसे करने के चरण दिए गए हैं। तीन भाग हैं क्योंकि Postgres FIPS-जागरूक नहीं है, और आपको Postgres में कुछ संशोधन करने की आवश्यकता है।
एक कदम
आपको कॉन्फ़िगरेशन के लिए ओपनएसएसएल बनाना होगा। यह दो चरणों वाली प्रक्रिया है। सबसे पहले आप FIPS ऑब्जेक्ट मॉड्यूल का निर्माण करें; और दूसरा, आप FIPS सक्षम लाइब्रेरी बनाते हैं।
FIPS ऑब्जेक्ट मॉड्यूल बनाने के लिए, पहले आप `openssl-fips-2.n.n.tar.gz डाउनलोड करें। अनपैक करने के बाद, आप निम्न कार्य करते हैं:
./configure
make
sudo make install
उपरोक्त कमांड चलाने के बाद, fipscanister
/usr/local/ssl/fips-2.0
. में स्थित होगा . FIPS सक्षम पुस्तकालय इसका उपयोग FIPS मान्य क्रिप्टोग्राफी प्रदान करने के लिए करेगा।
दूसरा, आप डाउनलोड करें openssl-1.n.n.tar.gz
. अनपैक करने के बाद, आप निम्न कार्य करते हैं:
./configure fips shared <other options>
make all
sudo make install
महत्वपूर्ण हिस्सा है fips
कॉन्फ़िगरेशन के दौरान विकल्प।
उपरोक्त आदेशों को चलाने के बाद, आपके पास एक FIPS सक्षम पुस्तकालय होगा। पुस्तकालय /usr/local/ssl/lib
. में स्थित होगा . libcrypto.so
. का उपयोग करें और libssl.so
हमेशा की तरह।
FIPS सक्षम पुस्तकालय fipscanister
. का उपयोग करता है , इसलिए आपको इस बारे में चिंता करने की ज़रूरत नहीं है कि /usr/local/ssl/fips-2.0
में क्या है . यह सिर्फ FIPS ऑब्जेक्ट मॉड्यूल (कुछ हाथ से छूट) के निर्माण से एक आर्टिफैक्ट है।
दूसरा चरण
पता लगाएं कि Postgres 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();
be-secure.c
खोलें और fe-secure.c
, और 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();
...
}
...
}
अगर FIPS_mode_set
पर कॉल करें सफल होता है, तो आप FIPS मान्य क्रिप्टोग्राफी का उपयोग कर रहे होंगे। यदि यह विफल हो जाता है, तब भी आप OpenSSL की क्रिप्टोग्राफी का उपयोग कर रहे होंगे, लेकिन यह नहीं होगा FIPS मान्य क्रिप्टोग्राफी बनें।
आपको निम्न शीर्षलेखों को be-secure.c
में भी जोड़ना होगा और fe-secure.c
:
#include <openssl/opensslconf.h>
#include <openssl/fips.h>
तीसरा चरण
अंतिम चरण यह सुनिश्चित करना है कि आप चरण एक से FIPS सक्षम पुस्तकालय का उपयोग कर रहे हैं। ऐसा CFLAGS
के माध्यम से करें और 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>
...