我们的应用程序包括一个将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 -info
PKCS7加密的数据:
pbeWithSHA1And40BitRC2-CBC
,迭代50000请提出正确的算法/正确值以尝试certpbe,keypbe
openssl命令可使用任何替代RC2-40的算法(不是FIPS投诉)
谢谢。
最佳答案
选项-certpbe -keybpe -descert
仅在使用openssl pkcs12 -export
创建PKCS12文件(从用于密钥和证书的PEM文件)时适用。在读取现有文件时(如您所做的那样),它们将被忽略,未实现,被丢弃,无效且无用。现有的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
可以避免为内部管道数据指定或输入冗余密码(至少两次),但是如果您(或您的规则制定者)愿意,可以忽略它。关于ssl - 在启用FIPS的OS中从p12生成pem文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59604568/