使用OpenSSL做什么;无法写入';随机状态'&引用;什么意思?

使用OpenSSL做什么;无法写入';随机状态'&引用;什么意思?,openssl,Openssl,我正在生成一个自签名SSL证书以保护我的服务器的管理部分,我一直从OpenSSL收到以下消息: 无法写入“随机状态” 这是什么意思 这是在Ubuntu服务器上。我已将libssl升级为fix。实际上,发生这种情况的最常见原因似乎是主目录中的.rnd文件由root用户而不是您的帐户拥有。快速解决方案: sudo rm ~/.rnd 有关更多信息,请参阅以下内容: 有时,openssl命令行实用程序不会中止并显示“PRNG not seeded”错误消息,但会抱怨它“无法写入‘随机状态’”。此消息

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

无法写入“随机状态”

这是什么意思


这是在Ubuntu服务器上。我已将libssl升级为fix。

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

sudo rm ~/.rnd
有关更多信息,请参阅以下内容:

有时,openssl命令行实用程序不会中止并显示“PRNG not seeded”错误消息,但会抱怨它“无法写入‘随机状态’”。此消息引用默认种子设定文件(请参阅前面的答案)。一个可能的原因是,由于未设置RANDFILE和HOME,因此不知道默认文件名。(在本例中,高达0.9.6的版本在当前目录中使用了文件“.rnd”,但在0.9.6a中发生了更改。)

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


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

显然,我需要以root身份运行OpenSSL,以使其拥有种子文件的权限。

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

我在windows server上也有同样的问题。然后,我通过更改
vars.bat
得出以下结论:

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

然后从头开始重做,一切都会好起来。

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

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


我不知道这已经咬了我多少次了…

您应该设置$RANDFILE环境变量和/或创建$HOME/.rnd文件。(). (当然,您应该拥有该文件的权限。此处的其他答案与此相关。但首先您应该拥有该文件及其引用。)

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

如果默认种子设定文件不存在或太短,则可能会出现“PRNG not seeded”错误消息


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

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


这就成功了。

我的系统给了我这个问题,因为“.rnd”文件是由root用户而不是我的用户拥有的。一个快速的
sudo-chown用户:user ~/.rnd
解决了所有问题。我遇到了与OP相同的问题。我做了
sudo
的事情,它成功了。但是,为什么在我创建自签名证书后,我的$HOME中仍然有一个由root用户创建的
.rnd
目录?是的,如果您从php web服务器运行,用户是www数据,您应该在每个openssl:shell\u exec('export RANDFILE=“.rnd”;openssl ecparam-genkey-name secp256k1')之前添加“export”))如果您使用像PHP这样的脚本语言将openssl作为www数据调用,您可以通过创建
/var/www/.rnd
并将其转换为
www-data
来解决这个问题。(假设
/var/www
www data
的主文件夹,它在大多数系统上都存在。您可以使用
cat/etc/passwd | grep www data
检查
www data
的主文件夹)我在使用Windows-当然,我需要以管理员身份运行CMD提示符!这样做,就解决了这个问题。更可能的情况是,您曾经以root用户身份运行过它,因此,您的主目录中的.rnd文件是在仅为root用户设置权限的情况下创建的。这件事不久前发生在我身上。删除.rnd解决了此问题。我在windows上以管理员身份运行,但在计算机上作为管理员和使用“以管理员身份运行”时仍然会出现错误。“以管理员身份运行”强制程序以管理员身份运行,否则即使您是管理员,提示也将在非管理员安全许可的情况下运行。如果您在管理员模式下运行,并且仍然收到“无法写入“随机状态”的消息,另一个解决方案是在执行
openssl
之前,在Powershell中这是
$env:RANDFILE=“.rnd”
而不是
设置RANDFILE=.rnd
。不这样做有什么坏处?就是这样!谢谢我在“init config”和“vars”命令之间,根据指令(此处:)进行了此更改。一定是因为我安装了32位版本(我更喜欢)。这就成功了,我不需要以管理员的身份运行。谢谢事实上,我只是简单地使用了
set HOME=。
就像其他人建议的那样设置这个集合RANDFILE=.rnd在没有使用administrator命令行的情况下对我有效。Ori在lambda中也遇到了同样的问题,这就解决了这个问题。非常感谢。