PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Активирайте FIPS в базата данни на PostgreSQL

Не вярвам, че можете да стартирате Postgres в "FIPS режим" поради използването на неодобрена криптография. От минал одит знам, че използва широко MD5 (вижте например Пощенски списък на Postgres:Използване на MD5 . Така че много неща ще се повредят на практика.

Независимо от това, ето стъпките, за да опитате да го направите чрез OpenSSL. Има три части, тъй като Postgres не познава FIPS и трябва да направите някои модификации в Postgres.

Първа стъпка

Трябва да изградите OpenSSL за конфигурацията. Това е процес от две стъпки. Първо изграждате обектния модул 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>
...


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Споделете връзка с postgres db между процеси в Python

  2. Как да проверя дали съществува публична схема на PostgreSQL?

  3. Как да работим с таблици без PRIMARY KEY в Hibernate?

  4. CTE и парадоксът за рождения ден

  5. Как мога да преобразувам всички колони в моята база данни в нечувствителни към главни и малки букви