OpenSSL 在 PKCS12 导出期间挂起,并显示“正在将‘屏幕’加载到随机状态”

Posted

技术标签:

【中文标题】OpenSSL 在 PKCS12 导出期间挂起,并显示“正在将‘屏幕’加载到随机状态”【英文标题】:OpenSSL hangs during PKCS12 export with "Loading 'screen' into random state" 【发布时间】:2016-03-13 10:26:32 【问题描述】:

我正在使用 OpenSSL(不是 makecert)生成一个自签名 SSL 证书,用于 IIS。

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj '//CN=myhost'

(双斜线是正确的。没有它上面的命令不起作用。)

openssl pkcs12 -export -out key.pfx -inkey key.pem -in cert.pem -name 'myhost'

第一个命令运行成功完成。然而,第二个卡住了

将“屏幕”加载到随机状态 -

我正在使用 Git for Windows (2.6.3) 附带的 OpenSSL (1.0.2d)。 有人遇到同样的问题吗?

澄清: 问题How to fix "unable to write 'random state' " in openssl 描述了不同的——编写.rnd 文件的问题。这里的问题似乎是生成随机状态。 (并且仅在第二个命令中。)

【问题讨论】:

您是否尝试过使用其他版本的 OpenSSL(它们有独立版本)? 没有。 (最后,我改用了 MakeCert。) How to fix "unable to write 'random state' " in openssl 的可能重复项。此外,Windows 上还有一些错误;请参阅 OpenSSL wiki 上的 Random Numbers | Windows Issues。最后,/CN=myhost 可能是错误的;见How to create a self-signed certificate with openssl? 【参考方案1】:

请尝试在oppenssl前加winpty

winpty openssl ...

或者你可以运行一个由 winpty 封装的新 bash:

winpty bash

在 Windows 控制台中,终端输入/输出存在一些问题,因此如果某些软件需要 unix 终端行为,winpty 可以提供帮助。

winpty帮我在这个环境下运行openssl:

git version 2.7.3.windows.1
OpenSSL 1.0.2g  1 Mar 2016

【讨论】:

这个答案和@Duncan Smart 的答案是可以互换的。导出 PFX 文件时,OpenSSL 会提示输入密码,但显然 Windows 版 Git 中的终端无法处理此 I/O,因此命令会挂起。在命令前加上 winpty 包装命令,以便 I/O 正常工作,而传递 -passout 意味着 OpenSSL 不再需要输入密码。 花了 30 年的时间,但 Windows 10 附带的 powershell 控制台终于能够进行半体面的 ANSI/VT 仿真,请参阅 devblogs.microsoft.com/commandline/… 。从 powershell 控制台运行时,openssl 密码提示可以正常工作,您可以通过 ssh 连接运行编辑器,而不会损坏您打开的每个文件,并且您可以剪切和粘贴。您甚至可以调整终端窗口的大小。现在,如果我只能摆脱令人难以忍受的“唤醒死者”控制台哔声......【参考方案2】:

我发现我需要在命令行中使用 -passout pass:SomePassword 指定 PFX 密码 - 例如:

openssl pkcs12 -export -out foo_example_com.pfx -inkey foo_example_com.key -in foo_example_com.crt -passout pass:Pa55w0rd

【讨论】:

用这个救了我的命 非常感谢。它只是挂起,没有任何迹象表明必须提供密码。 完美运行!!非常感谢!!【参考方案3】:

最近,我在 Windows 10 笔记本电脑上通过 ssh 在 azure ubuntu VM 中运行 openssl 时遇到了同样的问题。我也从 windows 命令提示符和 powershell 尝试了 windows 的 openssl。这背后的根本原因似乎是从 windows 命令提示符使用时 openssl 的终端兼容性。

我发现基于wsl (windows-subsystem-linux) 的shell 似乎很好,并且命令通过正确的提示而不是似乎挂起。这里的步骤将是

    安装ubuntu on windows 启动 Windows 命令提示符。使用 wsl 命令启动 bash shell。 openssl 工具已在此 shell 中可用。它应该提供密码并验证密码提示。

【讨论】:

以上是关于OpenSSL 在 PKCS12 导出期间挂起,并显示“正在将‘屏幕’加载到随机状态”的主要内容,如果未能解决你的问题,请参考以下文章

使用OpenSSL创建多级CA证书链签发证书并导出为pkcs12/p12/pfx文件

使用OpenSSL创建多级CA证书链签发证书并导出为pkcs12/p12/pfx文件

openssl PKCS12 导出 - 在密码中使用单引号字符时出现错误行为

指定 CSR 文件时,OpenSSL pkcs12 导出失败

如何以编程方式在 OpenSSL 中加载 PKCS#12 文件?

Openssl 将仅包含 RSA 私钥的 .PEM 转换为 .PKCS12