postgresql - 在 PostgreSQL 数据库上启用 FIPS

标签 postgresql openssl fips

有人可以指定在 Postgres 数据库上启用 FIPS 的步骤吗?我用谷歌搜索但找不到任何具体内容。

最佳答案

Can someone please specify the steps to enable FIPS on Postgres Database?

我不相信您可以在“FIPS 模式”下运行 Postgres,因为它使用了未经批准的加密技术。从过去的审计中,我知道它广泛使用了 MD5(例如,参见 Postgres Mailing List: Use of 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 Capable Library 将使用它来提供 FIPS 验证密码术。

其次,您下载 openssl-1.n.n.tar.gz。解包后,您执行:

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

关键部分是配置期间的fips选项。

运行上述命令后,您将拥有一个支持 FIPS 的库。该库将位于 /usr/local/ssl/lib。一如既往地使用 libcrypto.solibssl.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.cfe-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 验证的加密技术。

您还需要将以下 header 添加到 be-secure.cfe-secure.c:

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

第三步

最后一步是确保您使用第一步中的 FIPS Capable Library。通过 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>
...

关于postgresql - 在 PostgreSQL 数据库上启用 FIPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12056994/

相关文章:

Python:无法从 hashlib 导入 scrypt

java - 如何通过 BouncyCaSTLe JSSE 提供商 + FIPS 提供商选择性地使用仅批准模式?

android - 使 Android 应用程序使用 FIPS 140-2 验证加密

postgresql - 启动时的 Sail.js 多个连接

postgresql - Postgres : Queries with INTERVAL operation don work over constraints

python - 为什么具有相同 key 的相同字符串的 AES 加密密码总是不同的?

c# - MVC 应用程序可以在 Visual Studio 中运行,但不能在 IIS7 中运行

mysql - Shapado:在 MySQL 还是 PostgreSQL 上运行?

postgresql - 跨 EC2 实例移动 Postgres 表空间和表

ssl - 结合 Wireshark 使用 Burp Suite 代理嗅探 https/SSL 流量