我正在生成一个自签名SSL证书来保护我服务器的管理部分,并且我不断从OpenSSL收到此消息:
无法写'随机状态'
这是什么意思?
这是在Ubuntu服务器上。我已升级libssl以修复the recent security vulnerability。
答案 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库的应用程序提供了自己的配置选项来指定熵源,请查看随应用程序提供的文档。