Ssl Curl不考虑给定的证书(使用--cert选项)

Ssl Curl不考虑给定的证书(使用--cert选项),ssl,curl,https,ssl-certificate,self-signed,Ssl,Curl,Https,Ssl Certificate,Self Signed,我正在尝试使用curl调用URL,我使用了以下命令: curl https://testenvironment/login --cert Qa1Certificate.pem 我得到的结果是: curl: (60) Peer certificate cannot be authenticated with known CA certificates More details here: http://curl.haxx.se/docs/sslcerts.html curl performs

我正在尝试使用curl调用URL,我使用了以下命令:

curl https://testenvironment/login --cert Qa1Certificate.pem
我得到的结果是:

curl: (60) Peer certificate cannot be authenticated with known CA certificates
 More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
Qa1Certificate.pem放在当前目录中,我认为它没有被考虑,因为当我使用不存在的文件名运行同一命令时:

curl https://testenvironment/login --cert ThisFileDoesNotExist.pem
我得到了同样的结果

我知道我可以使用-k或--unsecure选项(或其他禁用curl证书验证的方法)获得所需的内容,但我 想要了解如何使用证书以成功访问我的测试环境

测试环境使用我使用openSSL获得的自签名证书。

TLDR:it's
--cacert

从系统上的手册页:

-E、 --证书

(TLS)告诉curl在获取带有HTTPS、FTPS或其他基于SSL的协议的文件时使用指定的客户端证书文件。[剪断休息]

请注意“客户端证书”字样
--cert
用于指定证书和可能的密钥以验证客户端,而不是验证服务器。 现在考虑男人页上的另一个条目:

--卡塞特

(TLS)告诉curl使用指定的证书文件来验证对等方。该文件可能包含多个CA证书。证书必须采用PEM格式。通常情况下,构建curl是为了为此使用默认文件,因此此选项通常用于更改该默认文件

这是一个选项,用于指定一个或多个证书以验证(特别是锚定)服务器的证书。由于服务器证书是自签名的,因此证书是其自身的锚定/根证书,并且实际上是CA证书,即使服务器实际上不是CA

这就是为什么您发布的错误消息中包含以下文字
您可以使用--cacert选项指定备用文件。
它没有说
--cert

是否读取客户端证书(和密钥)取决于您正在运行的特定构建的
curl
所使用的中间件。IME如果是用OpenSSL构建的,那么如果您使用不存在的文件名指定
--cert
,它确实会给出一个错误,但是使用NSS构建的版本(在Ubuntu 14.04LTS上)只有在服务器请求客户端身份验证时才会给出一个错误,而大多数服务器不这样做。

TLDR:it's
--cacert

从系统上的手册页:

-E、 --证书

(TLS)告诉curl在获取带有HTTPS、FTPS或其他基于SSL的协议的文件时使用指定的客户端证书文件。[剪断休息]

请注意“客户端证书”字样
--cert
用于指定证书和可能的密钥以验证客户端,而不是验证服务器。 现在考虑男人页上的另一个条目:

--卡塞特

(TLS)告诉curl使用指定的证书文件来验证对等方。该文件可能包含多个CA证书。证书必须采用PEM格式。通常情况下,构建curl是为了为此使用默认文件,因此此选项通常用于更改该默认文件

这是一个选项,用于指定一个或多个证书以验证(特别是锚定)服务器的证书。由于服务器证书是自签名的,因此证书是其自身的锚定/根证书,并且实际上是CA证书,即使服务器实际上不是CA

这就是为什么您发布的错误消息中包含以下文字
您可以使用--cacert选项指定备用文件。
它没有说
--cert

是否读取客户端证书(和密钥)取决于您正在运行的特定构建的
curl
所使用的中间件。IME如果使用OpenSSL构建,则如果您使用不存在的文件名指定
--cert
,则会出现错误,但使用NSS构建的版本(在Ubuntu 14.04LTS上)仅当服务器请求客户端身份验证时才会出现错误,而大多数服务器都不会出现此错误。

可能重复的