【发布时间】:2010-09-10 19:14:37
【问题描述】:
我正在生成一个自签名 SSL 证书来保护我的服务器的管理部分,并且我不断收到来自 OpenSSL 的这条消息:
无法写入“随机状态”
这是什么意思?
这是在 Ubuntu 服务器上。我已升级 libssl 以修复 the recent security vulnerability。
【问题讨论】:
标签: openssl
我正在生成一个自签名 SSL 证书来保护我的服务器的管理部分,并且我不断收到来自 OpenSSL 的这条消息:
无法写入“随机状态”
这是什么意思?
这是在 Ubuntu 服务器上。我已升级 libssl 以修复 the recent security vulnerability。
【问题讨论】:
标签: openssl
我今天在 AWS Lambda 上遇到了这个问题。我创建了一个环境变量 RANDFILE = /tmp/.random
成功了。
【讨论】:
您应该设置 $RANDFILE 环境变量和/或创建 $HOME/.rnd 文件。 (OpenSSL FAQ)。 (当然,您应该拥有该文件的权限。这里的其他答案是关于此的。但首先您应该拥有该文件和对它的引用。)
直到 0.9.6 版 OpenSSL 将种子文件写入当前目录的“.rnd”文件中。在 0.9.6a 版本中,您没有默认的种子文件。 OpenSSL 0.9.6b 及更高版本的行为与 0.9.6a 类似,但如果尚未设置环境变量,则会在 Windows 系统上为 HOME 使用默认值“C:\”。
如果默认种子文件不存在或太短,可能会出现“PRNG 未种子”错误消息。
$RANDFILE 环境变量和 $HOME/.rnd 仅由 OpenSSL 命令行工具使用。使用 OpenSSL 库的应用程序提供了自己的配置选项来指定熵源,请查看应用程序随附的文档。
【讨论】:
显然,我需要以 root 身份运行 OpenSSL 才能获得种子文件的权限。
【讨论】:
Windows 平台上的另一个问题,请确保您以管理员用户身份运行命令提示符!
我不知道这咬了我多少次......
【讨论】:
我在 Windows 服务器上也有同样的事情。然后我通过更改vars.bat 弄清楚了:
set HOME=C:\Program Files (x86)\OpenVPN\easy-rsa
然后从头开始重做,一切都会好起来的。
【讨论】:
set HOME=.
我知道这个问题在 Linux 上,但在 Windows 上我也遇到了同样的问题。事实证明,您必须在“以管理员身份运行”模式下启动命令提示符才能使其工作。否则你会得到相同的结果:无法写入“随机状态”错误。
【讨论】:
openssl 之前先set RANDFILE=.rnd。
$env:RANDFILE=".rnd" 而不是 set RANDFILE=.rnd。
在实践中,发生这种情况的最常见原因似乎是您的主目录中的 .rnd 文件归 root 而非您的帐户所有。快速修复:
sudo rm ~/.rnd
有关更多信息,请参阅OpenSSL FAQ 的条目:
有时,openssl 命令行实用程序不会中止并显示“PRNG 未播种”错误消息,但会抱怨它“无法写入‘随机状态’”。此消息指的是默认种子文件(请参阅上一个答案)。一个可能的原因是不知道默认文件名,因为 RANDFILE 和 HOME 都没有设置。 (在这种情况下,最高 0.9.6 的版本在当前目录中使用了文件“.rnd”,但随着 0.9.6a 的变化。)
所以我会检查 RANDFILE、HOME 和写入文件系统中这些位置的权限。
如果一切正常,您可以尝试使用strace 运行,看看到底发生了什么。
【讨论】:
sudo chown user:user ~/.rnd 让一切顺利。
sudo 的事情,它奏效了。但是为什么在我创建自签名证书后,我的 $HOME 中仍然有一个由 root 拥有的 .rnd 目录?
/var/www/.rnd 并将其更改为 www-data 来解决此问题。 (假设/var/www 是www-data 的主文件夹,它在大多数系统上都存在。您可以使用cat /etc/passwd | grep www-data 检查www-data 的主文件夹)
对我来说,问题是我的主目录中有 .rnd,但它归根用户所有。删除它并重新发出 openssl 命令修复了这个问题。
【讨论】: