我正在尝试连接到需要证书才能进行授权的服务。过程是我向服务发送一个CSR文件。该服务在CSR上签名并向我发送一个用于连接的证书。我通过以下命令行生成CSR:openssl req -new -nodes -newkey rsa:2048 -keyout cert.key -out cert.csr
我把cert.csr的内容发给了他们。他们生成客户端证书,我得到了一个PEM文件。
我现在尝试使用curl()的SSLCERT中的证书文件进行连接,并将cert.key中的私钥作为CURLOPT_SSLKEY提供(这是我在步骤1中获得的)。
失败的原因是:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
我在这个过程中做错了什么?
当我尝试使用从服务接收到的包含私钥的测试证书(自签名证书)时,它起作用。但是,当我使用从CSR生成的证书,然后使用私钥作为密钥时,握手失败会出错。
所以我知道这与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-pc-linux-gnu)libcurl/7.35.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 librtmp/2.3