PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Aktifkan FIPS di database PostgreSQL

Saya tidak percaya Anda dapat menjalankan Postgres dalam "mode FIPS" karena penggunaan kriptografi yang tidak disetujui. Dari audit sebelumnya, saya tahu itu menggunakan MD5 secara ekstensif (lihat, misalnya, Daftar Mailing Postgres:Penggunaan MD5 . Jadi banyak hal yang akan rusak dalam latihan.

Meskipun demikian, berikut adalah langkah-langkah untuk mencoba dan melakukannya melalui OpenSSL. Ada tiga bagian karena Postgres tidak sadar FIPS, dan Anda perlu membuat beberapa modifikasi pada Postgres.

Langkah Pertama

Anda harus membangun OpenSSL untuk konfigurasi. Ini adalah proses dua langkah. Pertama Anda membangun Modul Objek FIPS; dan kedua, Anda membangun FIPS Capable Library.

Untuk membangun Modul Objek FIPS, pertama-tama Anda mengunduh `openssl-fips-2.n.n.tar.gz. Setelah membongkar, Anda melakukan:

./configure
make
sudo make install

Setelah Anda menjalankan perintah di atas, fipscanister akan ditempatkan di /usr/local/ssl/fips-2.0 . Perpustakaan Berkemampuan FIPS akan menggunakannya untuk menyediakan Kriptografi yang Divalidasi FIPS.

Kedua, download openssl-1.n.n.tar.gz . Setelah membongkar, Anda melakukan:

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

Bagian penting adalah fips pilihan selama konfigurasi.

Setelah Anda menjalankan perintah di atas, Anda akan memiliki FIPS Capable Library. Perpustakaan akan berlokasi di /usr/local/ssl/lib . Gunakan libcrypto.so dan libssl.so seperti biasa.

Pustaka Berkemampuan FIPS menggunakan fipscanister , jadi Anda tidak perlu khawatir tentang apa yang ada di /usr/local/ssl/fips-2.0 . Ini hanya artefak dari pembuatan Modul Objek FIPS (beberapa tangan terlepas).

Langkah Kedua

Temukan tempat Postgres memanggil 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();

Buka be-secure.c dan fe-secure.c , dan tambahkan panggilan ke 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();
        ...
    }
    ...
}

Jika panggilan ke FIPS_mode_set berhasil, maka Anda akan menggunakan kriptografi tervalidasi FIPS. Jika gagal, Anda masih akan menggunakan kriptografi OpenSSL, tetapi tidak menjadi kriptografi yang Divalidasi FIPS.

Anda juga perlu menambahkan header berikut ke be-secure.c dan fe-secure.c :

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

Langkah Ketiga

Langkah terakhir adalah memastikan Anda menggunakan FIPS Capable Library dari langkah pertama. Lakukan melalui CFLAGS dan 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mendapatkan komentar peran dari database PostgreSQL

  2. Indeks Buat PostgreSQL

  3. PostgreSQL nilai berikutnya dari urutan?

  4. Java + SSH + Postgres

  5. Seberapa besar terlalu besar untuk tabel PostgreSQL?