无法将 /root/.rnd 加载到 RNG:我在哪里可以找到它,或者如何创建它?

无法将 /root/.rnd 加载到 RNG:我在哪里可以找到它,或者如何创建它?

我正在尝试在 Ubuntu Server 18.04 上使用 OpenVPN 设置 VPN 服务器,并且我想使用 EasyRSA 来构建我的 PKI CA。

因此,在以 root 身份连接时,我启动了复制到的 EasyRSA 脚本。使用和/etc/openvpn/easy-rsa一切都运行正常,但当我尝试启动 时,出现此错误:./clean-all./build-dh./pkitool --initca

Can't load /root/.rnd into RNG
140171234709952:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/root/.rnd

在 openssl 配置文件 ( /etc/openvpn/easy-rsa/openssl-1.0.0.cnf) 中,我发现此行表明了它尝试达到的原因/root/.rnd

RANDFILE    = $ENV::HOME/.rnd

从我在网上读到和理解的内容来看,.rnd这是一个 OpenSSL 用来生成随机数的种子。奇怪的是:尽管我遇到了这个错误,但 RSA 私钥确实是由脚本生成的。我只是担心它不是随机的,因为它缺少种子。

所以我的问题是:这个文件不存在于我的系统中,它不在 中/root/,也不在/home/user/我的其他用户中,并且find / -name ".rnd"什么都不返回。甚至find / -iname "*.rnd"什么都不返回。

我甚至不知道如何创建它,或者我是否理解错了。

答案1

尽管我收到此错误,但 RSA 私钥确实由脚本生成

该文件不需要存在;OpenSSL 在第一次之后会自行创建它。

我只是担心它不是随机的,因为它缺少种子。

操作系统通过/dev/urandom或通过系统调用(例如getentropy()或 )使用自己的 RNG 提供种子CryptGenRandom()。您无需提供任何额外的东西。

我猜想该.rnd文件或多或少是操作系统缺乏良好 CSPRNG 时的遗留问题,可能是当时 Linux/dev/urandom被认为质量较差(并且/dev/random由于“熵核算”而生成数据非常缓慢)。现在情况已不再如此,完全依赖存储在主目录中某个文件中的种子实际上是较少的安全的。

答案2

在预期路径中创建一个

cd ~/; openssl rand -writerand .rnd

答案3

OpenSSL 在第一次之后会自行创建它。

实际上,无论我启动脚本多少次或者只是尝试openssl rand直接使用该命令,它都不会被创建。

但是你是对的:我生成了两个密钥来检查它们是否不同,而且它们确实是不同的。

感谢您的帮助。

答案4

标记 /etc/ssl/openssl.conf 中的 RANDFILE 行 更多的

相关内容