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

如何使用命令行中的密码短语生成openSSL密钥?,openssl,Openssl,首先-如果我不提供密码短语会发生什么?是否使用了某种伪随机短语?我只是在寻找一些“足够好”的东西来阻止普通的黑客 第二,如何从命令行生成密钥对,并在命令行上提供密码短语 我最终通过使用这些命令,使用exec()实现了它的工作,通常认为使用exec()不安全,最好在文件中给出密码短语。我可以接受这种风险,因为我确信PHP只会在我的PC上执行(它运行windows&没有PS命令) 非常感谢@caf,没有他,这一切都不可能实现 唯一遗憾的是,无论我在谷歌上搜索了多少次,似乎都没有人能在Windows

首先-如果我不提供密码短语会发生什么?是否使用了某种伪随机短语?我只是在寻找一些“足够好”的东西来阻止普通的黑客

第二,如何从命令行生成密钥对,并在命令行上提供密码短语


我最终通过使用这些命令,使用exec()实现了它的工作,通常认为使用exec()不安全,最好在文件中给出密码短语。我可以接受这种风险,因为我确信PHP只会在我的PC上执行(它运行windows&没有PS命令)

非常感谢@caf,没有他,这一切都不可能实现


唯一遗憾的是,无论我在谷歌上搜索了多少次,似乎都没有人能在Windows上使用Xampp(这是生成密钥对的正确方法)

如果不使用密码短语,然后,私钥不使用任何对称密码加密-它的输出完全不受保护

您可以生成密钥对,在命令行上使用如下调用提供密码(在本例中,密码为
foobar
):

但是,请注意,由于命令行参数通常对所有进程都可见,因此该密码短语可能会被当时机器上运行的任何其他进程捕获

更好的替代方法是将密码短语写入受文件权限保护的临时文件,并指定:

openssl genrsa -aes128 -passout file:passphrase.txt 3072
或在标准输入上提供密码短语:

openssl genrsa -aes128 -passout stdin 3072
您还可以将命名管道与
文件:
选项或文件描述符一起使用


然后,要获得匹配的公钥,您需要使用
openssl rsa
,提供与加密私钥时使用的
-passin
参数相同的密码短语:

openssl rsa -passin file:passphrase.txt -pubout
(这需要标准输入上的加密私钥-您可以使用中的
-从文件中读取它)


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

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

genrsa
已经运行&当在终端中手动运行时,它将提示输入密码:

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
}

+1太好了,行了!谢谢,如果你能再帮上一点点,你就会得到答案。。。为什么这样不行?openssl rsa-in privkey.pem-pubout-passout pass:foobar-out pubkey.pemor,换一种说法——如何从您的命令中获取公钥(这与我的命令略有不同)。我只需要一双相配的。这只是“足够好”的安全性。@Mawg:Your
openssl
命令正在输出与提供的私钥相对应的公钥-公钥没有加密(它们不是秘密),因此使用
-passout
没有任何意义。您可能希望在此处使用
-passin
,以提供在第一步中用于加密私钥的密码短语。我还为答案添加了一些内容。@caf,感谢您的宝贵反馈(+1)。然而,我显然太笨了,不能被允许使用OpenSSL。我希望密钥在一个文件中,出于某种原因,
openssl genrsa 2048-aes128-passout pass:foobar-out privkey.pem
不能这样做。您能给我两个命令吗?一个命令生成文件中的私钥,另一个命令生成公钥(也在文件中)?抱歉这么麻烦,但我一直在玩弄它&就是不能让它工作:-(@Mawg:OpenSSL不喜欢
-out
参数在
2048
之后出现-真的,这应该是命令行上的最后一件事(我已经更新了我的答案)。看最后一个例子,我想这就是你想要的。至于AES-128,建议它优于AES-256。为什么
openssl\u pkey\u new()
…生成密钥对的“正确”方法?Windows(通常)没有
ps
,但因为Vista,它有
wmic进程获取命令行
啊,Vista。也称为“从这里出发的唯一途径是打开Windows”;-)而且,由于我对Redmond产品怀旧,几十年前(也就是眨眼之间),有3个Widows版本可用:,因此为我们Widows提供了CE ME NT。有趣的事实/突击测试::CE实际上是“嵌入式紧凑型”,所以为什么,哦,为什么他们没有给它命名为Windows EC?
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
}