我正在尝试在 Ubuntu Server 18.04 上使用 OpenVPN 设置 VPN 服务器,并且我想使用 EasyRSA 来构建我的 PKI CA。
因此,当以 root 身份连接时,我启动了我复制到的 EasyRSA 脚本/etc/openvpn/easy-rsa
。一切正常,./clean-all
and ./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"
一无所获。
而且我什至不知道如何创建它,或者我是否理解这一切都错了。
该文件不需要存在;OpenSSL 在第一次之后会自行创建它。
/dev/urandom
操作系统通过或通过系统调用(例如getentropy()
或)使用其自己的 RNG 提供种子CryptGenRandom()
。您无需提供任何额外的东西。我猜该
.rnd
文件或多或少是操作系统缺乏良好 CSPRNG 的日子的遗留物,可能是当 Linux/dev/urandom
被认为质量差时(并且/dev/random
由于“熵核算”而产生的数据非常缓慢)。现在情况不再如此,完全依赖存储在 homedir 中某个文件上的种子实际上会不太安全。在预期路径中创建一个
实际上,它不会,无论我启动脚本多少次,或者我只是尝试
openssl rand
直接使用该命令,它都不会被创建。但你是对的:我生成了两个密钥来检查它们是否不同,它们是否不同。
谢谢您的帮助。
备注 /etc/ssl/openssl.conf 中的RANDFILE 行