我正在尝试在 openshift 上使用 openssl 生成 CSR。当我使用 SSH 运行命令时,我遇到了这个问题。
openssl genrsa -des3 -out myApp.key 2048
Generating RSA private key, 2048 bit long modulus
...........+++
.....................................................................+++
unable to write 'random state'
e is 65537 (0x10001)
我研究了一下,尝试了一些方法
- 切换到数据目录或用户有权限的其他目录,然后执行命令。这不起作用。同样的错误
- 有些人建议以 sudo 方式运行此命令。但我无法在 openshift 服务器上执行此操作。
- 其他人提到使用此命令 sudo rm ~/.rnd 删除 .rnd 文件,但我再次无法在 openshift 上运行它。
有什么提示吗?我很奇怪为什么这种事情会发生在一个干净的新应用程序上。
答案1
发生此错误的原因是您无权在 Openshift 上的主目录中创建文件。此命令尝试在创建文件,$HOME/.rnd
但您看到错误,因为无法创建该文件。
您必须指定openssl
使用哪个文件来写入随机状态,并通过导出环境变量来实现$RANDFILE
。在 Openshift 上,您可以在目录中写入$OPENSHIFT_DATA_DIR
,因此请按如下方式创建命令:
export RANDFILE=$OPENSHIFT_DATA_DIR/.rnd
openssl genrsa -des3 -out $OPENSHIFT_DATA_DIR/myApp.key 2048
答案2
类似的解决方案,但我发现对我来说很明智这里。
所以我做了接下来的事情:
mkdir ~/"directory where certificates will be generated"
cd ~/"directory where certificates will be generated"
touch .rnd
export RANDFILE="~/"directory where certificates will be generated"/.rnd"
现在openssl genrsa -des3 -out server.key 2048
命令对我来说可以正常工作。
答案3
我的机器出现这个问题是因为“.rnd”文件的所有者是 root 而不是我的用户。
更改所有者解决了我的问题:
sudo chown $USER:$USER ~/.rnd