在启用 FIPS 的操作系统中从 p12 生成 pem 文件



我们的应用程序包含一个将 p12 转换为 pem 格式的脚本。操作系统启用了RHEL 7 FIPS,它使用的是OpenSSL 1.0.2k-fips库。在此 pem 转换期间,脚本失败并显示以下错误。尝试了 RC2-40 以外的几种算法,但仍然失败,试图找到正确的标志来传递 openssl 命令以使此 pem 转换成功,任何建议:

命令:

openssl pkcs12 -in app1-serverpub.p12 -certpbe pbeWithSHA1And3-KeyTripleDES-CBC -keypbe pbeWithSHA1And3-KeyTripleDES-CBC -out ca-bundle.pem -passin pass:xxxx -info

错误:

MAC Iteration 100000  
MAC verified OK  
PKCS7 Encrypted data: `pbeWithSHA1And40BitRC2-CBC`, Iteration 50000  
Error outputting keys and certificates  
139990890305424:error:060740A0:digital envelope routines:EVP_PBE_CipherInit:unknown cipher:evp_pbe.c:181:  
139990890305424:error:23077073:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 algor cipherinit error:p12_decr.c:87: 
139990890305424:error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt error:p12_decr.c:139:

====

============================================================================根据各种建议尝试了以下命令,但仍然无法覆盖此错误:


openssl pkcs12 -in app1-serverpub.p12 -out ca-bundle.pem -passin pass:xxxx -descert -infoPKCS7加密数据:pbeWithSHA1And40BitRC2-CBC,迭代50000

  1. 请建议正确的算法/正确的值来尝试证书,键pbe
  2. openssl 命令使用任何覆盖 RC2-40 的算法,该算法不是 FIPS 投诉

谢谢。

选项仅在使用openssl pkcs12 -export创建PKCS12 文件(从密钥和证书的 PEM 文件中(时-certpbe -keybpe -descert适用。在读取现有文件时,它们会被忽略、不实现、丢弃、无效和无用,就像您正在做的那样。现有的 p12 文件使用加密时选择的算法加密了其部分内容(称为"袋子"(,并且您拥有的文件已经使用过去使用的算法进行了加密 - 显然包括 RC2-40 用于证书包,这是非常常见和事实上的标准(以及未处于 FIPS 模式时 openssl 的默认值(。你现在所做的任何事情都无法改变这一点,因为它发生在过去,时间只会前进而不是倒退。

根据在 FIPS 模式下使用此系统的原因,您可能能够获得在非 FIPS 模式下运行此特定操作的权限。我假设输出 PEM 文件将在此系统上使用,并且做出这些决定的人都可能要求私钥输出符合 FIPS 标准,但这没关系,因为 pkcs12pbe-using-SHA1-plus-3DES 的 OpenSSL 默认值是(已批准(的。

或者,您必须让创建此文件的人或任何内容使用批准的算法,或者您必须将其转换为在另一个不强制实施 FIPS 的系统上执行此操作;在该系统上,您可以使用:

openssl pkcs12 -in bad.p12 -passin whatever -nodes | openssl pkcs12 -export -descert -passout whatever -out good.p12

这会将内容转换为 PEM,并将它们直接传送到一个过程,该过程会转换回新的、兼容的 p12。使用-nodes可避免为内部管道数据指定或输入冗余密码(至少两次(,但如果您(或您的规则设置者(愿意,可以省略它。

最新更新