有人可以指定在 Postgres 数据库上启用 FIPS 的步骤吗?我用谷歌搜索,但找不到任何具体的东西。
3 回答
有人可以指定在 Postgres 数据库上启用 FIPS 的步骤吗?
我不相信您可以在“FIPS 模式”下运行 Postgres,因为它使用了未经批准的密码学。从过去的审计中,我知道它广泛使用了 MD5(例如,请参阅Postgres 邮件列表:使用 MD5。所以很多东西在实践中都会被打破。
尽管如此,以下是尝试通过 OpenSSL 执行此操作的步骤。分为三个部分,因为 Postgres 不支持 FIPS,您需要对 Postgres 进行一些修改。
第一步
您必须为配置构建 OpenSSL。这是一个两步过程。首先构建 FIPS 对象模块;其次,构建 FIPS 能力库。
要构建 FIPS 对象模块,首先下载 `openssl-fips-2.nntar.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.so
使用。libssl.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.c
and 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
and 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>
...
对于 Red Hat Linux 上的 PostgreSQL,https: //public.cyber.mil/stigs/downloads/ 网站有一个 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.
Joseph Conway 指出“STIG 所指的附录 G 位于 PostgreSQL STIG 补充文件中,而不是 [postgresql.org] 文档。您可以在此处获取补充文件(以及 STIG 的其余部分):https://dl.dod .cyber.mil/wp-content/uploads/stigs/zip/U_PGS_SQL_9-x_V2R1_STIG.zip
据我了解您的问题,您正在考虑尝试确保您可以使用 AES 算法加密传入和传出 PostgreSQL 的数据。虽然 FIPS 远远超出了这一点,也远远超出了问答中可以提出的问题,但至少这个问题很容易回答。
简单的解决方案是将 SSL 与您选择的证书颁发机构一起使用(如果您使用的是 Active Directory,则可以使用证书服务器,否则您可以使用 OpenSSL 来运行自己的证书颁发机构)。然后,您可以指定要使用的加密标准(请参阅官方文档)。从那里将使用加密,并且您的服务器将通过您的客户端进行身份验证。您还可以设置客户端证书并要求对它们进行身份验证。