如何使用命令行中的密码生成openSSL密钥?

时间:2010-11-28 00:32:44

标签: openssl

首先 - 如果我不给出密码,会发生什么?是否使用了某种伪随机短语?我只是在寻找“足够好”的东西来阻止随意的黑客入侵。

第二 - 如何从命令行生成密钥对,在命令行上提供密码?


我终于使用这些命令工作,使用exec()通常认为使用不安全,最好将PassPhrase放在文件中。我可以接受这种风险,因为我确信PHP只能在我的PC上运行(运行Windows并且没有PS命令)。

openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 2048
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub

非常感谢@caf,没有他们,这是不可能的。

只有一个遗憾 - 无论我有多少Google,似乎没有人能够openssl_pkey_new()在Windows上使用Xampp(这是生成密钥对的正确方式)

2 个答案:

答案 0 :(得分:165)

如果您不使用密码短语,则私钥不会使用任何对称密码加密 - 输出完全不受保护。

您可以生成密钥对,使用类似的调用(在这种情况下,密码为foobar)在命令行上提供密码:

openssl genrsa -aes128 -passout pass:foobar 3072

但是,请注意,此密码短语可以被当时在计算机上运行的任何其他进程抓取,因为命令行参数通常对所有进程都可见。

更好的选择是将密码短语写入受文件权限保护的临时文件中,并指定:

openssl genrsa -aes128 -passout file:passphrase.txt 3072

或者在标准输入上提供密码:

openssl genrsa -aes128 -passout stdin 3072

您还可以使用带有file:选项或文件描述符的命名管道。


要获取匹配的公钥,您需要使用openssl rsa,提供与用于加密私钥的-passin参数相同的密码:

openssl rsa -passin file:passphrase.txt -pubout

(这需要标准输入上的加密私钥 - 您可以使用-in <file>从文件中读取它。)


在文件中创建3072位私钥和公钥对的示例,其中私钥对使用密码foobar加密:

openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 3072
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub

答案 1 :(得分:3)

genrsareplaced by genpkey,并且在终端中手动运行时,将提示您输入密码:

openssl genpkey -aes-256-cbc -algorithm RSA -out /etc/ssl/private/key.pem -pkeyopt rsa_keygen_bits:4096

但是,从脚本运行时,该命令不会要求输入密码,因此为了避免在进程中看到该密码,请使用shell脚本中的函数:

get_passwd() {
    local passwd=
    echo -ne "Enter passwd for private key: ? "; read -s passwd
    openssl genpkey -aes-256-cbc -pass pass:$passwd -algorithm RSA -out $PRIV_KEY -pkeyopt rsa_keygen_bits:$PRIV_KEYSIZE
}