Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash脚本中使用PKCS#12证书进行cURL_Bash_Curl_Openssl_Pkcs12 - Fatal编程技术网

在bash脚本中使用PKCS#12证书进行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

我必须连接到Web服务,其中必须有pkcs12证书。其想法是在bash脚本中使用curl(具体来说,在osx下)

我了解到curl在通信中不能做的少数事情之一是处理pkcs12证书(.p12)。我有什么选择

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

将pkcs12转换为pem的过程如下(例如),它对我很有效,但我还没有成功地将它们用于curl:

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。带有密码的第一个命令可以作为只要密码正确,否则就会出现错误。