使用自签名证书和cURL?

时间:2014-12-22 22:09:31

标签: ssl curl ssl-certificate

我有一个使用自签名证书运行的烧瓶应用程序。我可以使用:

发送卷曲请求
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

使用private.pem文件时,CURL会抛出此错误:

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

有什么建议吗? - 或者这只能通过正确签署的证书吗?

TNX

2 个答案:

答案 0 :(得分:44)

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

或者更坦率地说:

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

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

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

(SNI需要-servername,以便您获得正确的虚拟服务器证书)

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

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

答案 1 :(得分:0)

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

  • 第 1 步:在您要使用的项目的根目录下使用以下代码生成自签名证书。openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes
  • 第 2 步:在提示中填写所需的详细信息,但是当您到达 Common name 时输入 localhost,例如 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 文件路径被很好地引用。