使用带有 cURL 的自签名证书?

问题描述 投票:0回答:2

我有一个使用自签名证书运行的烧瓶应用程序。我可以使用以下方式发送 curl 请求:

curl -v -k -H "Content-Type: application/json" -d '{"data":"value1","key":"value2"}' https://<server_ip>:<port>

详细的日志显示一切正常。

我想避免使用 -k (--insecure) 选项,而是指定 curl 可以使用的 .pem 文件。查看 curl 手册页,我发现您可以使用 --cert 选项来执行此操作。 所以我使用这个创建了一个 .pem 文件:

openssl rsa -in server.key -text > private.pem

CURL 在使用 private.pem 文件时抛出这个错误:

curl: (58) unable to use client certificate (no key found or wrong pass phrase?)

有什么建议吗? - 或者只有正确签名的证书才有可能?

谢谢

ssl curl ssl-certificate
2个回答
86
投票

这只是这个问题的另一个版本:Using openssl to get the certificate from a server

或者更直白地说:

使用 curl --cert 是错误的,它用于客户端证书。

首先,获取您的服务器正在使用的证书:

$ echo quit | openssl s_client -showcerts -servername server -connect server:443 > cacert.pem

-servername
是 SNI 所必需的,这样您才能获得正确的虚拟服务器证书)

然后让你的 curl 命令行在后续操作中使用该设置来验证服务器:

$ curl --cacert cacert.pem https://server/ [and the rest]

特别预告

从 curl 7.88.0(将于 2023 年 2 月发布)开始,curl 可以使用新的

%{certs}
变量为-w选项保存证书本身。关于 here.

的博客

1
投票

通过 curl 从 https 服务器发出请求。我使用以下步骤

  • 第一步:在您要使用的项目的根目录下使用以下代码生成自签名证书。
    openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes
  • Step2:在提示中填写所需的详细信息,但是当您到达通用名称输入本地主机时,例如
    Common Name (eg, fully qualified host name) []:localhost
  • step3:生成 openssl cert.pem 和 key.pem 后启动服务器,然后在另一个终端或命令行中运行
    curl --cacert cert.pem https://localhost:443 

注意:我使用端口 443,这是默认的 https 端口,您可以使用另一个端口,然后确保正确引用 cert.pem 文件路径。

© www.soinside.com 2019 - 2024. All rights reserved.