首先 - 如果我不给出密码,会发生什么?是否使用了某种伪随机短语?我只是在寻找"足够好"的东西来阻止随意的黑客入侵.
第二 - 如何从命令行生成密钥对,在命令行上提供密码?
我终于使用这些命令工作,使用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
Run Code Online (Sandbox Code Playgroud)
很多人都要感谢@caf,没有他们,这是不可能的.
只有一个遗憾 - 无论我有多少谷歌,似乎没有人可以openssl_pkey_new()在Windows上使用Xampp(这是生成密钥对的正确方法)
caf*_*caf 183
如果您不使用密码短语,则私钥不会使用任何对称密码加密 - 它的输出完全不受保护.
您可以生成密钥对,使用类似的调用(在这种情况下,密码是foobar)在命令行上提供密码:
openssl genrsa -aes128 -passout pass:foobar 3072
Run Code Online (Sandbox Code Playgroud)
但请注意,此密码短语可能被当时在计算机上运行的任何其他进程抓取,因为命令行参数通常对所有进程可见.
更好的选择是将密码短语写入受文件权限保护的临时文件,并指定:
openssl genrsa -aes128 -passout file:passphrase.txt 3072
Run Code Online (Sandbox Code Playgroud)
或者在标准输入上提供密码:
openssl genrsa -aes128 -passout stdin 3072
Run Code Online (Sandbox Code Playgroud)
您还可以使用带有file:选项的命名管道或文件描述符.
要获得匹配的公钥,您需要使用openssl rsa相同的密码,-passin并使用与加密私钥相同的参数:
openssl rsa -passin file:passphrase.txt -pubout
Run Code Online (Sandbox Code Playgroud)
(这需要标准输入上的加密私钥 - 您可以使用它从文件中读取它-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
Run Code Online (Sandbox Code Playgroud)
genrsa在终端中手动运行时,已被genpkey&所代替,它将提示您输入密码:
openssl genpkey -aes-256-cbc -algorithm RSA -out /etc/ssl/private/key.pem -pkeyopt rsa_keygen_bits:4096
Run Code Online (Sandbox Code Playgroud)
但是,从脚本运行时,该命令将不会要求输入密码,因此为了避免在进程中使用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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
183278 次 |
| 最近记录: |