在PostgreSQL数据库上启用FIPS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在PostgreSQL数据库上启用FIPS相关的知识,希望对你有一定的参考价值。

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

答案

有人可以指定在Postgres数据库上启用FIPS的步骤吗?

我不相信你可以在“FIPS模式”下运行Postgres,因为它使用了非批准的加密技术。从过去的审核中,我知道它广泛使用MD5(例如,参见Postgres Mailing List: Use of MD5。所以很多东西在实践中会破坏。

尽管如此,以下是尝试通过OpenSSL执行此操作的步骤。有三个部分,因为Postgres不支持FIPS,你需要对Postgres进行一些修改。


第一步

您必须为配置构建OpenSSL。这是一个两步过程。首先构建FIPS对象模块;第二,构建FIPS Capable Library。

要构建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 Capable Library。图书馆将位于/usr/local/ssl/lib。一如既往地使用libcrypto.solibssl.so

FIPS Capable Library使用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验证加密。

您还需要将以下标题添加到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>
...
另一答案

对于Red Hat Linux上的PostgreSQL,https://iase.disa.mil/stigs/网站有一个PostgreSQL 9.x的安全技术实施指南,该指南有这个检查。

Rule Title: PostgreSQL must implement NIST FIPS 140-2 validated 
cryptographic modules to protect unclassified information requiring
confidentiality and cryptographic protection, in accordance with the data
owners requirements.
STIG ID:    PGS9-00-008200
Rule ID:    SV-87645r1_rule
Vuln ID:    V-72993

“修复文本”读取

Configure OpenSSL to be FIPS compliant. 

PostgreSQL uses OpenSSL for cryptographic modules. To configure OpenSSL to
be FIPS 140-2 compliant, see the official RHEL Documentation:

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security_Guide/sect-Security_Guide-Federal_Standards_And_Regulations-Federal_Information_Processing_Standard.html

For more information on configuring PostgreSQL to use SSL, see supplementary
content APPENDIX-G.

Joseph Conway指出“STIG所指的附录G是在PostgreSQL STIG补充中,而不是[postgresql.org]文档。你可以在这里获得补充(以及其余的STIG):http://iasecontent.disa.mil/stigs/zip/U_PostgreSQL_9-x_V1R1_STIG.zi p。

另一答案

据我所知,您正在尝试确保可以使用AES算法加密传输到PostgreSQL和从PostgreSQL传输的数据。虽然FIPS远远超出了这一点,并且远远超出了Q&A中可以提出的要求,但这个问题至少很容易回答。

简单的解决方案是将SSL与您选择的证书颁发机构一起使用(如果您使用的是Active Directory,则可以使用证书服务器,如果不是,则可以使用OpenSSL运行您自己的证书颁发机构)。然后,您可以指定要使用的加密标准(请参阅official docs)。从那里开始使用加密,您的服务器将通过身份验证给您的客户。您还可以设置客户端证书并要求对其进行身份验证。

以上是关于在PostgreSQL数据库上启用FIPS的主要内容,如果未能解决你的问题,请参考以下文章

请高手解答在windows7中的为此网络启用联邦信息处理标准(FIPS)兼容究竟是啥意思大神们帮帮忙

在windows7无线网络属性高级设置中有个选项:为此网络启用联邦信息处理标准(FIPS)兼容究竟是

请高手解答在windows7中的为此网络启用联邦信息处理标准(FIPS)兼容究竟是啥意思

无线网无法连接,之前又设置为此网络启用联邦信息处理标准FIPS兼容,是Win10的,怎么处理,关闭联邦兼容模式

如何启用 PostgreSQL 函数分析器?

PostgreSQL 是不是支持表(片段)的透明压缩?