我正在生成一个自签名 SSL 证书来保护我的服务器的管理部分,并且我不断从 OpenSSL 收到此消息:
无法写入“随机状态”
这是什么意思?
这是在 Ubuntu 服务器上。我已升级 libssl 以修复最近的安全漏洞。
实际上,发生这种情况的最常见原因似乎是您的主目录中的 .rnd 文件归 root 而非您的帐户所有。快速修复:
sudo rm ~/.rnd
有关更多信息,请参阅OpenSSL 常见问题解答中的条目:
有时,openssl 命令行实用程序不会中止并显示“PRNG 未播种”错误消息,而是抱怨它“无法写入'随机状态'”。此消息指的是默认种子文件(请参阅上一个答案)。一个可能的原因是不知道默认文件名,因为 RANDFILE 和 HOME 都没有设置。(在这种情况下,最高 0.9.6 的版本在当前目录中使用了文件“.rnd”,但在 0.9.6a 中已更改。)
所以我会检查 RANDFILE、HOME 和写入文件系统中这些位置的权限。
如果一切似乎都井然有序,您可以尝试使用strace运行,看看到底发生了什么。
我知道这个问题是在 Linux 上,但在 Windows 上我也有同样的问题。事实证明,您必须在“以管理员身份运行”模式下启动命令提示符才能使其工作。否则你会得到同样的结果:无法写入“随机状态”错误。
Windows 平台上的另一个问题,请确保您以管理用户身份运行命令提示符!
这不知道咬了我多少次...
显然,我需要以 root 身份运行 OpenSSL 才能获得种子文件的权限。
我在 Windows 服务器上有同样的事情。然后我通过改变vars.bat
这是:
set HOME=C:\Program Files (x86)\OpenVPN\easy-rsa
然后从头开始重做,一切都应该没问题。
您应该设置 $RANDFILE 环境变量和/或创建 $HOME/.rnd 文件。(OpenSSL 常见问题解答)。(当然,您应该拥有该文件的权利。这里的其他答案是关于此的。但首先您应该拥有该文件和对它的引用。)
直到 0.9.6 版本,OpenSSL 将种子文件写入当前目录的文件“.rnd”中。在 0.9.6a 版本中,您没有默认的种子文件。OpenSSL 0.9.6b 及更高版本的行为与 0.9.6a 类似,但如果尚未设置环境变量,则会在 Windows 系统上为 HOME 使用默认值“C:\”。
如果默认种子文件不存在或太短,则可能会出现“PRNG 未种子”错误消息。
$RANDFILE 环境变量和 $HOME/.rnd 仅由 OpenSSL 命令行工具使用。使用 OpenSSL 库的应用程序提供了自己的配置选项来指定熵源,请查看应用程序随附的文档。
我今天在 AWS Lambda 上遇到了这个问题。我创建了一个环境变量 RANDFILE = /tmp/.random
那成功了。
对我来说,问题是我的主目录中有 .rnd,但它归根用户所有。删除它并重新发出 openssl 命令修复了这个问题。