sve*_*son 33 bash curl openssl pkcs12
我必须连接到web服务,其中必须有pkcs12证书.我的想法是在bash脚本中使用curl(在OS X下,具体而言).
我已经了解到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
Run Code Online (Sandbox Code Playgroud)
任何提示?或者,任何卷曲的替代品?解决方案应该是基于命令行的.
小智 68
我认为你已经解决了但我遇到了同样的问题.我回答分享我的解决方案.
如果您有.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
Run Code Online (Sandbox Code Playgroud)
然后你必须打电话给你的网址.例如,假设您想获取特定Web服务的wsdl
curl -E ./file.crt.pem --key ./file.key.pem https://myservice.com/service?wsdl
Run Code Online (Sandbox Code Playgroud)
如果文件file.crt.pem和file.key.pem在您的工作文件夹中,则"./"是必需的.
检查是否有较新的卷曲。较新的版本可以直接处理PKCS12。
curl --cert-type P12 --cert cert.p12:password https://yoursite.com
Run Code Online (Sandbox Code Playgroud)
比奥夫的回答是正确的。
他建议这样做:
curl --cert-type P12 --cert cert.p12:password https://yoursite.com
Run Code Online (Sandbox Code Playgroud)
由于某种原因,这对我不起作用。我得到:
curl 无法打开 PKCS12 文件
我刚刚导出了没有p12密码的文件,然后使用了以下格式:
curl --cert-type P12 --cert cert.p12 https://yoursite.com
Run Code Online (Sandbox Code Playgroud)
您可以轻松检查您是否curl可以处理p12。很可能确实如此。只需man curl输入 即可搜索该选项/cert-typeEnter。这是手册对我所说的内容:
--cert-type <type>(TLS) 告诉curl 所提供的客户端证书正在使用什么类型。PEM、DER、ENG 和 P12 是公认的类型。如果未指定,则假定为 PEM。
如果多次使用此选项,则将使用最后一次。
| 归档时间: |
|
| 查看次数: |
41204 次 |
| 最近记录: |