422

我正在生成一个自签名 SSL 证书来保护我的服务器的管理部分,并且我不断从 OpenSSL 收到此消息:

无法写入“随机状态”

这是什么意思?

这是在 Ubuntu 服务器上。我已升级 libssl 以修复最近的安全漏洞

4

8 回答 8

569

实际上,发生这种情况的最常见原因似乎是您的主目录中的 .rnd 文件归 root 而非您的帐户所有。快速修复:

sudo rm ~/.rnd

有关更多信息,请参阅OpenSSL 常见问题解答中的条目:

有时,openssl 命令行实用程序不会中止并显示“PRNG 未播种”错误消息,而是抱怨它“无法写入'随机状态'”。此消息指的是默认种子文件(请参阅上一个答案)。一个可能的原因是不知道默认文件名,因为 RANDFILE 和 HOME 都没有设置。(在这种情况下,最高 0.9.6 的版本在当前目录中使用了文件“.rnd”,但在 0.9.6a 中已更改。)

所以我会检查 RANDFILE、HOME 和写入文件系统中这些位置的权限。

如果一切似乎都井然有序,您可以尝试使用strace运行,看看到底发生了什么。

于 2008-09-18T16:58:48.840 回答
283

我知道这个问题是在 Linux 上,但在 Windows 上我也有同样的问题。事实证明,您必须在“以管理员身份运行”模式下启动命令提示符才能使其工作。否则你会得到同样的结果:无法写入“随机状态”错误。

于 2011-11-21T18:25:23.183 回答
46

Windows 平台上的另一个问题,请确保您以管理用户身份运行命令提示符!

这不知道咬了我多少次...

于 2012-04-25T13:23:07.273 回答
18

显然,我需要以 root 身份运行 OpenSSL 才能获得种子文件的权限。

于 2008-09-18T17:09:51.370 回答
13

我在 Windows 服务器上有同样的事情。然后我通过改变vars.bat这是:

set HOME=C:\Program Files (x86)\OpenVPN\easy-rsa

然后从头开始重做,一切都应该没问题。

于 2011-06-26T14:34:30.843 回答
7

您应该设置 $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 库的应用程序提供了自己的配置选项来指定熵源,请查看应用程序随附的文档。

于 2018-01-16T21:19:03.857 回答
7

我今天在 AWS Lambda 上遇到了这个问题。我创建了一个环境变量 RANDFILE = /tmp/.random

那成功了。

于 2020-01-13T11:07:27.213 回答
6

对我来说,问题是我的主目录中有 .rnd,但它归根用户所有。删除它并重新发出 openssl 命令修复了这个问题。

于 2011-04-04T10:26:42.150 回答