我正在生成一个自签名SSL证书来保护我的服务器的管理部分,我一直从OpenSSL得到这个消息:

无法写入“随机状态”

这是什么意思?

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


当前回答

对我来说,问题是我的主目录中有.rnd,但它是由root拥有的。删除它并重新发布openssl命令可以解决这个问题。

其他回答

您应该设置$RANDFILE环境变量和/或创建$HOME/。多文件。(OpenSSL FAQ)。(当然,您应该拥有该文件的权利。这里的其他答案都是关于这个的。但首先你应该有文件和对它的引用。)

直到0.9.6版本,OpenSSL将播种文件写入当前目录的“。rnd”文件中。在0.9.6a版本,你没有默认的播种文件。OpenSSL 0.9.6b及以后版本的行为将类似于0.9.6a,但如果没有设置环境变量,将在Windows系统上为HOME使用默认的“C:\”。

如果默认的播种文件不存在或太短,可能会提示“PRNG not seeds”错误。

$RANDFILE环境变量和$HOME/。rnd仅供OpenSSL命令行工具使用。使用OpenSSL库的应用程序提供了它们自己的配置选项来指定熵源,请查看应用程序附带的文档。

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

我不知道它咬了我多少次……

在实践中,发生这种情况最常见的原因似乎是主目录中的.rnd文件由root而不是您的帐户拥有。权宜之计:

sudo rm ~/.rnd

有关更多信息,这里是来自OpenSSL常见问题解答的条目:

有时openssl命令行实用程序不会中止一个“PRNG未播种”错误消息,但抱怨它是“无法写入'随机状态'”。此消息引用默认播种文件(参见前面的回答)。一个可能的原因是不知道默认文件名,因为RANDFILE和HOME都没有设置。(0.9.6以下版本使用文件"。Rnd”在当前目录下,但这已经改变了0.9.6a。)

因此,我将检查RANDFILE、HOME以及写入文件系统中这些位置的权限。

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

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

这招奏效了。

显然,我需要以root身份运行OpenSSL,以便它拥有对播种文件的权限。