我有一个使用自签名证书运行的烧瓶应用程序。我可以使用:
发送卷曲请求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
答案 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 服务器发出请求。我使用以下步骤
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes
Common Name (eg, fully qualified host name) []:localhost
curl --cacert cert.pem https://localhost:443
注意:我使用端口 443,这是默认的 https 端口,您可以使用另一个端口,然后确保 cert.pem 文件路径被很好地引用。