使用自签名证书和cURL?

who*_*cow 25 ssl curl ssl-certificate

我有一个使用自签名证书运行的烧瓶应用程序.我可以使用以下命令发送卷曲请求:

curl -v -k -H "Content-Type: application/json" -d '{"data":"value1","key":"value2"}' https://<server_ip>:<port>
Run Code Online (Sandbox Code Playgroud)

详细的日志显示一切顺利.

我想避免使用-k(--insecure)选项,而是指定curl可以使用的.pem文件.看一下curl手册页,我发现你可以使用--cert选项来做到这一点.所以我用这个创建了一个.pem文件:

openssl rsa -in server.key -text > private.pem
Run Code Online (Sandbox Code Playgroud)

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

curl: (58) unable to use client certificate (no key found or wrong pass phrase?)
Run Code Online (Sandbox Code Playgroud)

有什么建议? - 或者这是否只有正确签署的证书?

TNX

Dan*_*erg 51

这只是这个问题的另一个版本:使用openssl从服务器获取证书

或者更坦率地说:

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

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

$ echo quit | openssl s_client -showcerts -servername server -connect server:443 > cacert.pem
Run Code Online (Sandbox Code Playgroud)

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

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

$ curl --cacert cacert.pem https://server/ [and the rest]
Run Code Online (Sandbox Code Playgroud)

  • 这会将其他输出添加到cacert.pem.您可以使用此命令行:'openssl s_client -showcerts -servername server -connect server:443 </ dev/null | sed -n -e'/ BEGIN\CERTIFICATE /,/ END\CERTIFICATE/p'> server.pem' (4认同)
  • 我试过这样做但我仍然得到同样的错误:`curl:(58)无法使用客户端证书(没有找到密钥或错误的密码?)`.我按照这些说明生成了自签名的客户端和服务器证书:http://dst.lbl.gov/~boverhof/openssl_certs.html.还有什么我可能做错了? (3认同)
  • ...还应告知openssl“退出”以避免挂起(并导致Web服务器出现“错误请求”):`echo quit | openssl s_client -showcerts-服务器名称服务器-连接服务器:443&gt; cacert.pem` (2认同)