在bash脚本中使用PKCS#12证书进行cURL
我必须连接到Web服务,其中必须有pkcs12证书。其想法是在bash脚本中使用curl(具体来说,在osx下) 我了解到curl在通信中不能做的少数事情之一是处理pkcs12证书(.p12)。我有什么选择 我已经读到将证书转换为PEM格式是可行的(使用openssl),但是我不知道如何告诉curl它获得了PEM,并且应该与请求PKCS12证书的Web服务通信 将pkcs12转换为pem的过程如下(例如),它对我很有效,但我还没有成功地将它们用于curl:在bash脚本中使用PKCS#12证书进行cURL,bash,curl,openssl,pkcs12,Bash,Curl,Openssl,Pkcs12,我必须连接到Web服务,其中必须有pkcs12证书。其想法是在bash脚本中使用curl(具体来说,在osx下) 我了解到curl在通信中不能做的少数事情之一是处理pkcs12证书(.p12)。我有什么选择 我已经读到将证书转换为PEM格式是可行的(使用openssl),但是我不知道如何告诉curl它获得了PEM,并且应该与请求PKCS12证书的Web服务通信 将pkcs12转换为pem的过程如下(例如),它对我很有效,但我还没有成功地将它们用于curl: openssl pkcs12 -in
openssl pkcs12 -in mycert.p12 -out file.key.pem -nocerts -nodes
openssl pkcs12 -in mycert.p12 -out file.crt.pem -clcerts -nokeys
有什么提示吗?或者,有没有卷曲的替代品?解决方案应该是基于命令行的。我认为您已经完全解决了问题,但我遇到了相同的问题。我愿意分享我的解决方案 如果你有一个.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
然后你必须调用你的url。例如,假设您想要获取特定Web服务的wsdl
curl -E ./file.crt.pem --key ./file.key.pem https://myservice.com/service?wsdl
如果文件file.crt.pem和file.key.pem在您的工作文件夹中,“/”是必需的。检查您是否有更新的curl。较新版本可以直接处理PKCS12
curl --cert-type P12 --cert cert.p12:password https://yoursite.com
我的答案是正确的
他建议:
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
并向下滚动,直到找到证书类型。我的是这样的:
--证书类型
(TLS)告诉curl提供的客户端证书正在使用的类型。PEM、DER、ENG和P12是公认的类型。如果未指定,则假定为PEM
如果多次使用此选项,将使用最后一个选项
(我认为cmmd+F
对终端中不可见的文本不起作用。因此,您必须向下滚动。对我来说,这起作用:curl-k--cert./file.crt.pem--cert-type pem--key./file.key.pem--key-type pem--pass“”这里只想让大家知道,如果您在上面的评论中使用curl-k
作为Kartins,您将禁用https检查。此外,使用-nodes
将禁用加密,这意味着您将从受密码保护的加密文件中取出私钥,并将其存储为未受保护的未加密文件;curl的某些版本支持加密的PEM文件,因此-nodes
甚至可能不必要您可能需要添加“-unsecure”curl--unsecure--cert type P12--cert cert.P12:password@mancocapac它有点违背了安全连接的目的。你是正确的,但是在我的情况下它是必需的。在X公司工作时,他们有一个证书,并且在内部使用它,它没有在CA注册。没有这个标志,我不能使用curl或postman。带有密码的第一个命令可以作为只要密码正确,否则就会出现错误。