我正在尝试在 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 行 更多的