Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何在没有交互的情况下为P12到PEM文件转换指定密码短语。_Macos_Shell_Unix_Terminal - Fatal编程技术网

Macos 如何在没有交互的情况下为P12到PEM文件转换指定密码短语。

Macos 如何在没有交互的情况下为P12到PEM文件转换指定密码短语。,macos,shell,unix,terminal,Macos,Shell,Unix,Terminal,我正在尝试将P12文件转换为PEM文件。当我执行命令时,终端要求我做三件事: P12密码短语(我输入,点击回车) PEM密码短语(键入,点击回车) PEM密码短语确认(输入,点击回车) 我知道我可以使用以下命令一次性执行sudo命令: echo sudopassword | sudo rm -rf /file.p12; 如何一次添加所有三个值?谢谢你试过重复三行吗?这可能会奏效 echo $'P12 passphrase\nPEM passphrase\nPEM passphrase conf

我正在尝试将P12文件转换为PEM文件。当我执行命令时,终端要求我做三件事:

P12密码短语(我输入,点击回车)
PEM密码短语(键入,点击回车)
PEM密码短语确认(输入,点击回车)

我知道我可以使用以下命令一次性执行sudo命令:

echo sudopassword | sudo rm -rf /file.p12;

如何一次添加所有三个值?谢谢

你试过重复三行吗?这可能会奏效

echo $'P12 passphrase\nPEM passphrase\nPEM passphrase confirm' | cmd

尽管我觉得我必须指出,像这样重复使用密码是非常不安全的。密码不仅会出现在bash历史文件中,而且系统中运行
ps

的任何其他人都可以看到密码。您能解释一下这些P12文件是什么吗?我找到了使用
openssl
将pkcs12证书/密钥文件转换为.PEM格式的方法。(http://gridsite.org)

答案的关键是:

使用
-passin文件:…
-passout文件:…
进行无人值守处理

我猜您必须为这种情况指定
-passin文件:p12密码
-passout文件PEMpassphrase
选项

这个小测试确认了如何通过
文件:
参数指定输入密码短语。这有助于隐藏这些短语,避免任何越肩攻击。别忘了限制对这些文件的访问。尽管这是大多数openssl命令的一个常见特性,但并未明确提及,它是原始问题的关键。选项的完整列表如下所示

$openssl pkcs12-passin文件:p12短语
无法打开文件P12短语
获取密码时出错
(我让OP来构造完整的命令。)

以下是
pkcs12
子命令支持的所有选项:

$openssl pkcs12帮助
用法:pkcs12[选项]
选项在哪里
-导出输出PKCS12文件
-链添加证书链
-inkey文件私钥(如果未填充)
-证书文件f在f中添加所有证书
-CApath arg-CA的PEM格式目录
-CAfile arg-CA的PEM格式文件
-name“name”使用name作为友好名称
-caname“nm”使用nm作为CA友好名称(可以多次使用)。
-内嵌输入文件名
-输出文件输出文件名
-不,不要输出任何东西,只是验证一下。
-nomacver不验证MAC。
-nocert不输出证书。
-clcerts仅输出客户端证书。
-cacerts仅输出CA证书。
-nokeys不输出私钥。
-info提供关于PKCS#12结构的信息。
-des使用des加密私钥
-des3使用三重DES加密私钥(默认)
-aes128,-aes192,-aes256
使用cbc aes加密PEM输出
-节点不加密私钥
-noiter不使用加密迭代
-maciter使用MAC迭代
-twopass单独的MAC、加密密码
-descert使用三重DES加密PKCS#12证书(默认RC2-40)
-certpbe alg指定证书PBE算法(默认RC2-40)
-keypbe alg指定私钥PBE算法(默认3DES)
-keyex设置MS密钥交换类型
-keysig设置MS密钥签名类型
-密码p设置导入/导出密码源
-密码输入文件密码短语源
-密码输出文件密码短语源
-引擎e使用引擎e,可能是一个硬件设备。
-兰德文件:文件:。。。
将文件(或目录中的文件)加载到
随机数发生器
-CSP名称Microsoft CSP名称
-LMK将本地机器密钥集属性添加到私钥

这些命令不太可能是从stdin读取的。更可能的是,他们直接从终端读取数据。这允许他们设置一种不将密码回显到屏幕上的模式。尝试将您的输入回显到
/dev/tty

除此之外,您还需要使用/之类的工具来控制这些。这些项目是专门为此目的而建立的


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 
tmp=`mktemp`

cat>$tmp我使用了
openssl pkcs12-in Certificates.p12-out sampleCore.pem-nodes
,它对我有效。

尝试得不错,但不起作用。我仍然会被提示输入三个密码。@JackHumphries:在这种情况下,命令可能是直接与tty对话,而不是使用stdin。这是一个很好的暗示,你不应该这样做。那么你建议我怎么做?当然有办法做到这一点。我正在将一个P12文件上传到一个PHP文件(这就是为什么命令必须一次性执行)。PHP然后执行这个shell命令。这一切都在我自己的个人服务器上,完成后我可以调用
history-c
。@JackHumphries:也许你可以编写一个脚本用于
expect
?你用什么来转换?openssl?如果您给出有问题的实际命令,这会更容易。这不是更适合超级用户或服务器故障吗?它不是演示,而是解释文件:。。。语法。我已经删除了我的原始评论,并更新了答案的文本。