在bash脚本中使用PKCS#12证书的cURL

时间:2015-08-27 15:43:14

标签: bash curl openssl pkcs12

我必须连接到web服务,其中必须使用pkcs12证书。我的想法是在bash脚本中使用curl(在OS X下,具体而言)。

我了解到curl在通信中无法做到的一件事就是处理pkcs12证书(.p12)。我有什么选择?

我已经读过将证书转换为PEM格式会起作用(使用openssl),但是我不知道如何告诉curl它获得PEM并且应该与请求PKCS12证书的web服务进行通信。

将pkcs12转换为pem就像这样(例如),它对我有用,但是我还没有成功地使用它们卷曲:

openssl pkcs12 -in mycert.p12 -out file.key.pem -nocerts -nodes
openssl pkcs12 -in mycert.p12 -out file.crt.pem -clcerts -nokeys

任何提示?或者,任何卷曲的替代品?解决方案应该是基于命令行的。

3 个答案:

答案 0 :(得分:61)

我认为你已经解决了但我遇到了同样的问题。我回答分享我的解决方案。

如果您有.p12文件,那么您的方法是正确的。 首先,您必须将证书和密钥与p12文件分开。 例如,如果你有一个mycert.p12文件执行

openssl pkcs12 -in mycert.p12 -out file.key.pem -nocerts -nodes
openssl pkcs12 -in mycert.p12 -out file.crt.pem -clcerts -nokeys

然后你必须打电话给你的网址。例如,假设您想获取特定Web服务的wsdl

curl -E ./file.crt.pem --key ./file.key.pem https://myservice.com/service?wsdl

如果文件file.crt.pem和file.key.pem在您的工作文件夹中" ./"是强制性的。

答案 1 :(得分:3)

检查卷曲是否较新。较新的版本可以直接处理PKCS12。

curl --cert-type P12 --cert cert.p12:password https://yoursite.com

答案 2 :(得分:0)

bioffe的答案是正确的。

他建议这样做:

curl --cert-type P12 --cert cert.p12:password https://yoursite.com

由于某种原因对我不起作用。我得到了:

curl无法打开PKCS12文件

我刚结束导出p12文件而没有密码 ,并且最终只使用了以下格式。

curl --cert-type P12 --cert cert.p12 https://yoursite.com

您可以轻松检查自己的curl是否可以处理p12。很有可能。只需执行man curl并向下滚动直到找到cert-type。我的是这样的:

--cert-type <type>

(TLS)告诉curl提供的客户端证书使用的是哪种类型。 PEM,DER,ENG和P12是公认的类型。如果未指定,则假定为PEM。

如果多次使用此选项,将使用最后一个。

(我不相信cmmd + F可以处理终端中不可见的文本。因此,您必须向下滚动。