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

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

其次 – 如何从命令行生成密钥对,在命令行上提供密码短语?


我终于得到了它使用这些命令的工作,使用exec(),它通常被认为是不安全的使用,最好是在一个文件中给PassPhrase。 我可以接受这个风险,因为我相信PHP将只能在我的电脑上运行(它运行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,没有他们,这是不可能的。

只有一个遗憾 – 就是说,不pipe我有多lessGoogle,在Windows上使用Xampp都没有人能得到openssl_pkey_new() (这是生成密钥对的正确方法)

如果您不使用密码,那么私钥没有使用任何对称密码进行encryption – 它的输出完全不受保护。

你可以生成一个密钥对,在命令行中使用一个调用(在这种情况下,密码是foobar )来提供密码:

 openssl genrsa -aes128 -passout pass:foobar 3072 

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

更好的select是将密码写入临时文件,文件权限受到保护,并指定:

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

或者在标准input上提供密码短语:

 openssl genrsa -aes128 -passout stdin 3072 

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


为了获得匹配的公钥,你需要使用openssl rsa ,提供与用于encryption私钥的-passin参数相同的密码:

 openssl rsa -passin file:passphrase.txt -pubout 

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


在文件中创build3072位私钥和公钥对的示例,私钥对使用密码foobarencryption:

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