我正在生成一个自签名SSL证书来保护服务器的admin部分,并且不断从OpenSSL收到此消息:
无法写“随机状态”
这是什么意思?
这是在Ubuntu服务器上。我已经升级了libssl以修复最近的安全漏洞。
我正在生成一个自签名SSL证书来保护服务器的admin部分,并且不断从OpenSSL收到此消息:
无法写“随机状态”
这是什么意思?
这是在Ubuntu服务器上。我已经升级了libssl以修复最近的安全漏洞。
Answers:
实际上,发生这种情况的最常见原因似乎是您的主目录中的.rnd文件是由root而非您的帐户拥有的。快速修复:
sudo rm ~/.rnd
有关更多信息,这是OpenSSL FAQ中的条目:
有时,openssl命令行实用程序不会因“ PRNG not seed”错误消息而中止,而是抱怨它“无法写入'随机状态'”。此消息引用默认的种子文件(请参阅上一个答案)。可能的原因是,由于既未设置RANDFILE也未设置HOME,因此默认文件名未知。(在这种情况下,版本高达0.9.6的文件在当前目录中使用了文件“ .rnd”,但在0.9.6a中已更改。)
因此,我将检查RANDFILE,HOME和写入文件系统中那些位置的权限。
如果一切似乎都正常,则可以尝试使用strace运行并查看到底发生了什么。
sudo
件事,它奏效了。但是,为什么.rnd
在创建自签名证书后,我的$ HOME中仍拥有root 拥有的目录?
/var/www/.rnd
并加为来解决www-data
。(假设这/var/www
是www-data
大多数系统上的主目录,您可以使用来检查www-data
主目录cat /etc/passwd | grep www-data
)
我知道这个问题是在Linux上,但是在Windows上我有同样的问题。原来,您必须在“以管理员身份运行”模式下启动命令提示符,它才能正常工作。否则,您将得到相同的结果:无法写入“随机状态”错误。
set RANDFILE=.rnd
在执行之前openssl
。
$env:RANDFILE=".rnd"
它不是set RANDFILE=.rnd
。
Windows平台上的另一个问题,请确保您以管理用户身份运行命令提示符!
我不知道这咬了我多少次...
显然,我需要以root用户身份运行OpenSSL,以使其具有对种子文件的权限。
我在Windows Server上也有同样的事情。然后我通过更改更改来找出vars.bat
:
set HOME=C:\Program Files (x86)\OpenVPN\easy-rsa
然后从头开始重做,一切都应该没问题。
set HOME=.
您应该设置$ RANDFILE环境变量和/或创建$ HOME / .rnd文件。(OpenSSL FAQ)。(当然,您应该拥有该文件的权限。其他答案与此有关。但是首先,您应该拥有该文件及其引用。)
最高版本为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
做到了。
sudo chown user:user ~/.rnd
了所有问题。