PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Bật FIPS trên cơ sở dữ liệu PostgreSQL

Tôi không tin rằng bạn có thể chạy Postgres ở "chế độ FIPS" vì nó sử dụng mật mã không được chấp thuận. Từ một cuộc kiểm tra trước đây, tôi biết nó sử dụng rộng rãi MD5 (ví dụ:xem Danh sách gửi thư Postgres:Sử dụng MD5 . Vì vậy, rất nhiều thứ sẽ bị phá vỡ trong thực tế.

Mặc dù vậy, đây là các bước để thử và thực hiện qua OpenSSL. Có ba phần vì Postgres không biết FIPS và bạn cần thực hiện một số sửa đổi đối với Postgres.

Bước một

Bạn phải xây dựng OpenSSL cho cấu hình. Đây là một quy trình gồm hai bước. Đầu tiên, bạn xây dựng Mô-đun đối tượng FIPS; và thứ hai, bạn xây dựng Thư viện khả dụng FIPS.

Để xây dựng Mô-đun đối tượng FIPS, trước tiên bạn tải xuống `openssl-fips-2.n.n.tar.gz. Sau khi giải nén, bạn thực hiện:

./configure
make
sudo make install

Sau khi bạn chạy các lệnh trên, fipscanister sẽ được đặt tại /usr/local/ssl/fips-2.0 . Thư viện có khả năng FIPS sẽ sử dụng nó để cung cấp Mật mã đã được xác thực FIPS.

Thứ hai, bạn tải xuống openssl-1.n.n.tar.gz . Sau khi giải nén, bạn thực hiện:

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

Phần quan trọng là fips trong khi định cấu hình.

Sau khi bạn chạy các lệnh trên, bạn sẽ có Thư viện khả năng FIPS. Thư viện sẽ được đặt tại /usr/local/ssl/lib . Sử dụng libcrypto.solibssl.so như mọi khi.

FIPS Capable Library sử dụng fipscanister , vì vậy bạn không cần phải lo lắng về những gì trong /usr/local/ssl/fips-2.0 . Nó chỉ là một tạo tác từ việc xây dựng Mô-đun Đối tượng FIPS (một số từ bỏ).

Bước hai

Tìm nơi Postgres gọi 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();

Mở be-secure.cfe-secure.c và thêm cuộc gọi đến 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();
        ...
    }
    ...
}

Nếu cuộc gọi đến FIPS_mode_set thành công, sau đó bạn sẽ sử dụng mật mã được xác thực FIPS. Nếu nó không thành công, bạn sẽ vẫn sử dụng mật mã của OpenSSL, nhưng nó sẽ không là mật mã được xác thực bởi FIPS.

Bạn cũng sẽ cần thêm các tiêu đề sau vào be-secure.cfe-secure.c :

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

Bước ba

Bước cuối cùng là đảm bảo bạn đang sử dụng FIPS Capable Library từ bước một. Làm điều đó qua CFLAGSLDFLAGS :

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. django.db.utils.IntegrityError:column venue_city chứa giá trị null

  2. Cygnus-NGSI sẽ không lưu dữ liệu trong PostgreSQL

  3. Dữ liệu CSV vào postgreSQL bằng Python

  4. Cách tạo các câu lệnh chuẩn bị cho postgres động trong PHP

  5. Các vấn đề về truy vấn SQLite3 và Postgres / Heroku Ruby on Rails