如果运行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文件,而不会提示输入密码短语呢?
答案 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”。