代码之家  ›  专栏  ›  技术社区  ›  Mawg says reinstate Monica

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

  •  84
  • Mawg says reinstate Monica  · 技术社区  · 14 年前

    首先-如果我不给密码怎么办?是否使用了某种伪随机短语?我只是在找一些“足够好”的东西来阻止随便的黑客。

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


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

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

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

    只有一个遗憾,那就是,不管我怎么搜索,似乎没有人能得到 openssl_pkey_new() 在Windows上使用Xampp(它是 适当的 生成密钥对的方法)

    2 回复  |  直到 8 年前
        1
  •  183
  •   caf    7 年前

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

    您可以生成一个密钥对,在命令行上使用如下调用提供密码(在本例中,密码是 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位私钥和公钥对的示例,私钥对用密码加密 美食家 :

    openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 3072
    openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub
    
        2
  •  5
  •   Stuart Cardall    6 年前

    genrsa 已经 replaced 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
    }