我正在尝试连接一个需要证书授权的服务。流程是我发送一个CSR文件给服务,服务签署CSR并返回一个证书供我用于连接。
我使用以下命令行生成了CSR:
openssl req -new -nodes -newkey rsa:2048 -keyout cert.key -out cert.csr
我将cert.csr的内容发送给他们。他们生成了客户端证书,我得到了一个PEM文件。
现在我尝试使用他们提供的SSL证书文件连接curl(),并将cert.key中的私钥作为CURLOPT_SSLKEY提供-(这是我在步骤1中获得的)。
出现错误:
error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
在这个过程中我做错了什么?
当我使用一个从该服务生成的证书并使用我的私钥作为密钥时,它会出现握手失败的错误。但是,当我尝试使用一个包含来自该服务的测试证书和私钥的证书(自签名证书)时,它可以工作。
所以我知道这与openssl/curl不支持v3/TLS等其他人在寻找解决方案时发现的问题无关。
这是我运行的命令:
curl -i -v --request POST https://service.com/ --cert clientcert.pem --key private_key.pem --cert-type pem --tlsv1.1 --insecure
* Connected to service.com (1xx.xxx.xxx.xx) port 443 (#0)
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server key exchange (12):
* SSLv3, TLS handshake, Request CERT (13):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS handshake, CERT verify (15):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS alert, Server hello (2):
* error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
* Closing connection 0
运行以下版本:curl 7.35.0(x86_64-pc-linux-gnu)libcurl/7.35.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 librtmp/2.3
cert.key
,而不是private_key.pem
***。请修改您的命令:curl ... --key cert.key...
- jww