ssl 是否将自签名证书与cURL一起使用?

ltqd579y  于 2023-01-09  发布在  其他
关注(0)|答案(2)|浏览(164)

我有一个使用自签名证书运行的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?)

有什么建议吗?-或者只有在正确签名的证书上才有可能?
肌钙蛋白

hi3rlvi2

hi3rlvi21#

这只是这个问题的另一个版本: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]

特别预告

从curl7.88.0(将于2023年2月发布)开始,curl可以使用-w option.blogged about here的新%{certs}变量保存证书。

ep6jt1vc

ep6jt1vc2#

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

  • 步骤1:使用下面的代码在您要使用的项目的根目录下生成自签名证书。openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes
  • 第2步:在提示符中填入所需的详细信息,但当您进入通用名称时,请输入localhost,例如Common Name (eg, fully qualified host name) []:localhost
  • 步骤3:当你的openssl证书.pem &密钥.pem已经生成启动你的服务器,然后在另一个终端或命令行运行curl --cacert cert.pem https://localhost:443

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

相关问题