我有一个使用自签名证书运行的flask应用程序,我可以使用以下命令发送curl请求:
curl -v -k -H "Content-Type: application/json" -d '{"data":"value1","key":"value2"}' https://<server_ip>:<port>
详细日志显示一切正常。
我想避免使用-k(--unsecure)选项,而是指定curl可以使用的.pem文件,在查看curl手册页时,我发现可以使用--cert选项来实现这一点,因此我使用以下代码创建了一个.pem文件:
openssl rsa -in server.key -text > private.pem
当使用私有.pem文件时,CURL抛出此错误:
curl: (58) unable to use client certificate (no key found or wrong pass phrase?)
有什么建议吗?-或者只有在正确签名的证书上才有可能?
肌钙蛋白
2条答案
按热度按时间hi3rlvi21#
这只是这个问题的另一个版本:Using openssl to get the certificate from a server
或者更直白地说:
使用curl --cert是错误的,它用于客户端证书。
首先,获取服务器正在使用的证书:
(
-servername
对于SNI是必需的,以便您取回正确的虚拟服务器证书)然后让curl命令行使用该设置在后续操作中验证服务器:
特别预告
从curl7.88.0(将于2023年2月发布)开始,curl可以使用-w option.blogged about here的新
%{certs}
变量保存证书。ep6jt1vc2#
通过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文件路径是很好的参考。