ssl - 在支持 FIPS 的操作系统中从 p12 生成 pem 文件

标签 ssl openssl ssl-certificate fips

我们的应用程序包含一个将 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

  1. 请建议正确的算法/正确的值来尝试 certpbe、keypbe
  2. openssl 命令使用任何覆盖 RC2-40 的算法,这不是 FIPS 投诉

谢谢。

最佳答案

选项 -certpbe -keybpe -descert 仅适用于使用 openssl pkcs12 -export创建 PKCS12 文件(从 PEM 文件获取 key 和证书)。在读取现有文件时,它们将被忽略、未实现、丢弃、无效和无用,就像您正在做的那样。现有的 p12 文件的部分内容(称为“包”)使用加密完成时选择的算法加密,并且您拥有的文件已经使用过去使用的算法加密 - 显然包括 RC2 -40 用于证书包,这是非常常见的事实上的标准(以及不在 FIPS 模式下时 openssl 的默认值)。你现在做什么都无法改变这一切,因为它已经发生在过去,时间只会前进不会后退。

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

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

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

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

关于ssl - 在支持 FIPS 的操作系统中从 p12 生成 pem 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59604568/

相关文章:

ssl - ipython 笔记本服务器 SSL 错误

google-chrome - 带有 SubjectAlternativeName (SAN) 的证书在 Google Chrome 中给出了 ERR_CONNECTION_RESET

php - ssl_verify_result 为 0,当没有可用的 https 版本时

node.js - 在bash openssl中创建一个base64 md5哈希值,相当于在node.js中创建一个base64 md5哈希值

java - 如何在HttpsURLConnection中正确导入认证?

http - 如何在重定向到 SSL 期间保持相同的 ASP session ?

c++ - 在 OpenSSL 中验证 RSA 公钥?

SSL 证书已更新但更改不可见

php - MYSQLi 和 ssl 连接到数据库服务器

Python2.7。访问 HTTPS 网站并检索内容