使用OpenSSL“无法写'随机状态'”是什么意思?

时间:2008-09-18 16:56:43

标签: openssl

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

  

无法写'随机状态'

这是什么意思?

这是在Ubuntu服务器上。我已升级libssl以修复the recent security vulnerability

8 个答案:

答案 0 :(得分:531)

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

sudo rm ~/.rnd

有关详细信息,请参阅OpenSSL FAQ

中的条目
  

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

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

如果一切顺利,您可以尝试使用strace运行,看看到底发生了什么。

答案 1 :(得分:246)

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

答案 2 :(得分:37)

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

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

答案 3 :(得分:15)

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

答案 4 :(得分:12)

我在Windows服务器上有同样的事情。然后我通过改变vars.bat来找出答案:

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

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

答案 5 :(得分:6)

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

答案 6 :(得分:4)

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

做到了。

答案 7 :(得分:2)

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

最高版本0.9.6 OpenSSL在文件" .rnd"的当前目录中写入了种子文件。在版本0.9.6a,您没有默认的种子文件。 OpenSSL 0.9.6b及更高版本的行为类似于0.9.6a,但将使用默认值" C:\"如果尚未设置环境变量,则在Windows系统上用于HOME。

如果默认播种文件不存在或太短,则" PRNG不播种"可能会出现错误消息。

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