有人可以指定在Postgres数据库上启用FIPS的步骤吗?我用谷歌搜索但是找不到具体的东西。
答案 0 :(得分:4)
有人可以指定在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.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 Capable Library。通过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 :(得分:2)
对于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:
For more information on configuring PostgreSQL to use SSL, see supplementary
content APPENDIX-G.
约瑟夫康威指出“STIG所指的附录G是在PostgreSQL STIG补充中,而不是[postgresql.org]文档。你可以在这里获得补充(以及其余的STIG):{{3} }第
答案 2 :(得分:1)
据我所知,您正在尝试确保可以使用AES算法加密传入和传出PostgreSQL的数据。虽然FIPS远远超出了这一点,并且远远超出Q&amp; A中的要求,但这个问题至少很容易回答。
简单的解决方案是使用具有您选择的证书颁发机构的SSL(如果您使用的是Active Directory,则可以使用证书服务器,如果不是,则可以使用OpenSSL运行您自己的证书颁发机构)。然后,您可以指定要使用的加密标准(请参阅official docs)。从那里开始使用加密,您的服务器将通过身份验证给您的客户。您还可以设置客户端证书并要求对其进行身份验证。