我正在尝试将P12文件转换为PEM文件。当我执行命令时,终端要求我做三件事:
P12密码(我输入,点击输入)
PEM密码(输入,输入)
PEM密码确认(输入,输入)
我知道我可以使用以下方法一次性执行sudo命令:
echo sudopassword | sudo rm -rf /file.p12;
如何一次性添加所有三个值?感谢
答案 0 :(得分:0)
你能解释一下这些P12文件是什么吗?我发现this link处理了使用openssl
将pkcs12证书/密钥文件转换为.PEM格式的问题。 (http://gridsite.org)
答案的关键是:
使用-passin file:...
和-passout file:...
进行无人值守处理
我猜您必须为此案例指定-passin file:P12passphrase
和-passout file PEMpassphrase
选项。
这个小测试确认了如何通过file:<...>
参数指定输入密码。这有助于隐藏任何肩膀攻击中的此类短语。不要忘记限制对这些文件的访问。虽然它是大多数openssl命令的共同特征,但它没有明确提及,它是原始问题的关键。完整的选项列表如下。
$ openssl pkcs12 -passin file:P12phrase
Can't open file P12phrase
Error getting passwords
(我把它留给OP来构建完整的命令。)
以下是pkcs12
子命令的所有受支持选项:
$ openssl pkcs12 help
Usage: pkcs12 [options]
where options are
-export output PKCS12 file
-chain add certificate chain
-inkey file private key if not infile
-certfile f add all certs in f
-CApath arg - PEM format directory of CA's
-CAfile arg - PEM format file of CA's
-name "name" use name as friendly name
-caname "nm" use nm as CA friendly name (can be used more than once).
-in infile input filename
-out outfile output filename
-noout don't output anything, just verify.
-nomacver don't verify MAC.
-nocerts don't output certificates.
-clcerts only output client certificates.
-cacerts only output CA certificates.
-nokeys don't output private keys.
-info give info about PKCS#12 structure.
-des encrypt private keys with DES
-des3 encrypt private keys with triple DES (default)
-aes128, -aes192, -aes256
encrypt PEM output with cbc aes
-nodes don't encrypt private keys
-noiter don't use encryption iteration
-maciter use MAC iteration
-twopass separate MAC, encryption passwords
-descert encrypt PKCS#12 certificates with triple DES (default RC2-40)
-certpbe alg specify certificate PBE algorithm (default RC2-40)
-keypbe alg specify private key PBE algorithm (default 3DES)
-keyex set MS key exchange type
-keysig set MS key signature type
-password p set import/export password source
-passin p input file pass phrase source
-passout p output file pass phrase source
-engine e use engine e, possibly a hardware device.
-rand file:file:...
load the file (or the files in the directory) into
the random number generator
-CSP name Microsoft CSP name
-LMK Add local machine keyset attribute to private key
答案 1 :(得分:0)
这些命令不太可能从stdin读取。他们更有可能直接从终端阅读。这允许他们设置一个不会将密码回显到屏幕的模式。尝试将您的输入回显到/dev/tty
。
除此之外,您还需要使用类似expect / pexect的内容来控制这些内容。这些项目专门为此目的而建。
Openssl有一个-stdin optoin来从stdin读取它的输入。这有效:
tmp=`mktemp`
cat > $tmp <<EOF
$1
EOF
cat $tmp | openssl req -out CSR.csr -new -newkey rsa:2048 -nodes -keyout privateKey.key
我使用cat和here-document来避免将密码放在命令行上。
答案 2 :(得分:0)
我使用了openssl pkcs12 -in Certificates.p12 -out sampleCore.pem -nodes
,它对我有用。
答案 3 :(得分:-1)
您是否尝试过回显三条线?它可能会起作用
echo $'P12 passphrase\nPEM passphrase\nPEM passphrase confirm' | cmd
虽然我觉得我必须指出,回复这样的密码是非常不安全的。密码不仅会在您的bash历史记录文件中结束,而且对于运行ps
的系统中的任何其他人也可以看到。