将密码传递给 OpenSSL 的更安全的方法是什么?

将密码传递给 OpenSSL 的更安全的方法是什么?

使用 OpenSSL,在 bash 中有两种方法可以使用环境变量作为密码:
pass:"${var}"env:var

我想知道哪种方法提供的安全性最高,因为手册页让它看起来像是ps在传递时可以读取密码pass:"${var}",并且也可能使用env:var

OpenSSL 手册页的相关部分:

密码短语参数

几个命令接受密码参数,通常分别使用 -passin 和 -passout 作为输入和输出密码。这些允许从各种来源获取密码。这两个选项都采用单个参数,其格式如下所述。如果没有给出密码参数并且需要密码,则提示用户输入密码:通常会从当前终端读取密码,并关闭回显。

密码:密码

实际密码是 password。由于密码对实用程序(如 Unix 下的“ps”)是可见的,因此这种形式只应在安全性不重要的场合使用。

环境:变量

从环境变量 var 获取密码。由于其他进程的环境在某些平台上是可见的(例如某些 Unix 操作系统下的 ps),因此应谨慎使用此选项。

答案1

手册页对这个问题说得很清楚,你应该使用环境:变量方法。

手册页是正确的,所有命令行参数都可以通过 ps 看到全部用户在系统上。

alice$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass pass:123456
evil$ ps aux|grep openssl                                                                                                                               
alice      17594  115  0.0  17108  4424 pts/6    R+   11:02   0:03 openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass pass:123456

如果您使用环境变量,其他用户(root 除外)将只能看到该变量的名称,但看不到其内容。

alice$ OPENSSLPW=123456
alice$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass env:OPENSSLPW
evil$ ps aux|grep openssl                                                                                                                               
alice      17713  115  0.0  17108  4424 pts/6    R+   11:02   0:03 openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass env:OPENSSLPW

相关内容