openssl:如何在脚本中将pfx转换为pem

时间:2019-03-15 15:07:08

标签: openssl certificate pem pfx pkcs#12

如果运行openssl pkcs12 -in cert.pfx -out cert.pem -password pass:mypass,我可以成功地将pfx转换为pem。尽管会提示我输入PEM密码,所以私钥在.pem文件中被加密。

但是在脚本中,如何自动输入PEM密码?我尝试使用-passin参数,但没有效果。

我猜想,如果我分别连接PEM证书和PEM密钥(而不是从pfx),则等效于从pfx转换为pem,但是来自PFX的PEM文件具有外部的Bag属性base64字符串,我不知道这是否重要。

那么,如何正确地使用加密的私钥“创建” PEM文件,而不会提示输入密码短语呢?

1 个答案:

答案 0 :(得分:1)

如果您查看openssl pkcs12文档,则会看到:

  

-传递参数

     

PKCS#12文件(即输入文件)密码源。有关arg格式的更多信息,请参见PASS PHRASE ARGUMENTS   openssl(1)部分。

     

-passout arg

     

密码短语来源,用于加密任何输出的私钥。有关arg格式的更多信息,请参见PASS PHRASE ARGUMENTS   openssl(1)部分。

哪个指向您:

  

通行短语选项

     

几个命令接受密码参数,通常使用-passin   和-passout分别用于输入和输出密码。这些允许   从各种来源获得的密码。这两个   选项采用单个参数,其格式如下所述。如果不   给出密码参数并要求输入密码,然后用户   提示输入一个:通常会从当前读取   具有回音功能的终端。

     

请注意,字符编码可能相关,请参阅   密码编码(7)。

     

pass:password

     

实际密码是密码。由于密码对实用程序可见(例如Unix下的'ps'),因此仅在以下情况下使用此格式:   安全性并不重要。 env:var

     

从环境变量var获取密码。由于其他进程的环境在某些平台上可见(例如   ps(在某些Unix OS下)。请谨慎使用此选项。   文件:路径名

     

路径名的第一行是密码。如果将相同的路径名参数提供给-passin和-passout参数,则第一个   行将用于输入密码,下一行用于   输出密码。路径名不必引用常规文件:它可以   例如,引用设备或命名管道。 fd:number

     

从文件描述符号中读取密码。例如,这可用于通过管道发送数据。标准输入

     

从标准输入中读取密码。

因此,可以将所有内容放在一起:

openssl pkcs12 -in cert.pfx -out cert.pem -passin pass:mypass -passout: pass:mypass

关于-password对您不起作用的原因:

  

-密码arg

     

对于-export,-password等效于-passout。除此以外,   -password等效于-passin。

因此,由于您未使用“ -export”,因此仅与“ -passin”选项相同。由于这种行为,我喜欢显式地使用“ -passin”和“ -passout”。