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 导出失败