我必须连接到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
任何提示?或者,任何卷曲的替代品?解决方案应该是基于命令行的。
答案 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
可以处理终端中不可见的文本。因此,您必须向下滚动。