1)我使用以下命令创建了myfile.csr
req -out myfile.csr -new -newkey rsa:2048 -nodes -keyout myfile-pr.key
- 我将myfile.csr发送给第三方进行签名
- 第三方应用程序已签名并发送给我服务器文件.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
相同的命令在窗口中不起作用