使用 CURL 调用相互 2 路 SSL Web 服务



1)我使用以下命令创建了myfile.csr

req -out myfile.csr -new -newkey rsa:2048 -nodes -keyout myfile-pr.key
  1. 我将myfile.csr发送给第三方进行签名
  2. 第三方应用程序已签名并发送给我服务器文件.pem

使用这些文件,我将能够使用 curl 命令调用 REST 网络服务。我尝试了以下命令,但它返回了未经授权的错误

curl --cacert ./serverfile.pem --key ./myfile-pr.key --cert ./myfile.csr --pass <password>   https://serverpost:port/getEmployeeInfo
--cacert

用于指定具有证书颁发机构 (CA) 的公共证书的文件。如果您在系统上安装了第三方 CA 证书,则不需要此选项。

使用--cert,您可以指定根据您的 CSR 颁发给您的签名客户端证书。从man curl

-E, --cert <certificate[:p>
告诉 curl 在获取具有 HTTPS、FTPS 或其他基于 SSL 的协议的文件时使用指定的客户端证书文件。如果使用安全传输,证书必须采用 PKCS#12 格式,如果采用 PEM 格式,则证书必须采用 PEM 格式 使用任何其他引擎。 如果未指定可选密码,则会在终端上查询该密码。请注意,此选项假定"证书"文件是私钥和客户端证书连接 - 啪!请参阅 -E、--cert 和 --key 以单独指定它们。

目前,您正在通过--cert参数传递 CSR(证书签名请求)。您的命令应如下所示:

curl --cacert ./3rd-party-ca-cert.pem --key ./myfile-pr.key --cert ./serverfile.pem --pass <password>   https://serverpost:port/getEmployeeInfo

正如我所提到的,如果您已经添加了此 CA(例如在 ubuntu https://superuser.com/a/719047 上),则可能不需要该--cacert

检查serverfile.pem以确保它仅包含客户端证书,而不是第三方 CA 证书链。

... s通道:发送初始握手数据:发送....

curl 不支持使用 SChannel 在命令行上使用客户端证书。请参阅此错误报告和此待办事项。

@SteffenUllrich:对不起,我应该格式化得更好。

问题是我正在尝试在窗口中卷曲(卷曲 7.55.1)。不确定是否是版本问题。在 Linux 中执行了以下命令,它可以工作

openssl pkcs12 -export -out combine.p12 -inkey client-cert-pr.key -in serverSelfSigned-cert.pem 
openssl pkcs12 -in combine.p12 -out ile.key.pem -nocerts -nodes 
openssl pkcs12 -in combine.p12 -out   file.crt.pem -clcerts -nokeys 
curl -E ./file.crt.pem --key ./file.key.pem https://thirdpartyserver.com/employee

注意:client-cert-pr.key:客户端私钥
服务器selfsigned-cert.pem:
第三方发送的自签名证书

以下其他 2 个选项也有效。谢谢@bagljas

curl --cacert ./serverfile.pem  --key ./myfile-pr.key --cert ./serverfile.pem  --pass <passwrod>  https://serverpost:port/getEmployeeInfo
curl --key ./myfile-pr.key --cert ./serverfile.pem  --pass <passwrod>  https://serverpost:port/getEmployeeInfo

相同的命令在窗口中不起作用

相关内容

  • 没有找到相关文章

最新更新