curl 连接到 shbr-staging.surescripts.net 时出现 SSL 协议错误

curl 连接到 shbr-staging.surescripts.net 时出现 SSL 协议错误

我正在尝试连接到:shbr-staging.surescripts.net/

以下是我遵循的步骤:

第一步:我生成了一个私钥

$openssl genrsa -des3 -out sc-private.key 2048
密码:xyz123

步骤 2:使用步骤 1 中的私钥生成 CSR 并将其发送至 surescripts

$openssl req -new -out for-surescripts-generated-on-20-july-2016.csr -key sc-private.key -config ./openssl.conf

步骤 3:Surescripts 通过电子邮件发回给我:drone.sc.com.p7b

步骤 4:验证文件 drone.sc.com.p7b 有 3 个证书

$openssl pkcs7 -inform der -in drone.sc.com.p7b -print_certs | less

步骤 5:从 p7b 文件中提取单个证书

$openssl pkcs7 -inform DER -print_certs -in drone.sc.com.p7b | awk 'split_after==1{n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "cert" n ".pem"}'

参考:stackoverflow.com/questions/6211591/export-p7b-file-with-all-the-certificate-chain-into-cer-file

步骤6:确认cert2.pem是客户端证书。

cert.pem
subject=/C=US/O=Surescripts LLC./OU=Surescripts 认证机构/CN=Surescripts 根认证机构
issuer=/C=US/O=Surescripts LLC./OU=Surescripts 认证机构/CN=Surescripts 根认证机构

cert1.pem
subject=/C=US/O=Surescripts LLC./OU=Surescripts 认证机构/CN=Surescripts 颁发认证机构
issuer=/C=US/O=Surescripts LLC./OU=Surescripts 认证机构/CN=Surescripts 根认证机构

cert2.pem
主题=/C=US/ST=California/L=Los Altos/O=Savant Care, Inc/OU=SC/CN=drone.sc.com/[电子邮件保护]
发行人=/C=US/O=Surescripts LLC./OU=Surescripts 认证机构/CN=Surescripts 颁发认证机构

步骤 7:验证私钥、证书和 CSR 是否匹配

$openssl rsa -noout -modulus -in sc-private.key | openssl md5
$openssl req -noout -modulus -in for-surescripts-generated-on-20-july-2016.csr | openssl md5
$openssl x509 -noout -modulus -in cert2.pem | openssl md5

所有 3 个都返回 a802effa75a7ee2750e7a25dc07a450d

参考:digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs

步骤 8:确认 curl 构建正确

$curl -V
curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3
协议:dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp
功能:AsynchDNS IDN IPv6 大文件 GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP UnixSockets

步骤 9:使用证书和私钥尝试通过 curl 进行连接:

$curl-k-vvvvhttps://shbr-staging.surescripts.net/--cert cert2.pem --key sc-private.key
* 尝试 69.25.46.22...
* 连接到 shbr-staging.surescripts.net (69.25.46.22) 端口 443 (#0)
* 在 /etc/ssl/certs/ca-certificates.crt 中找到 173 个证书
* 在 /etc/ssl/certs 中找到 1049 个证书
* ALPN,提供 http/1.1
* 读取 X.509 密钥或证书文件时出错:解密失败。
* 关闭连接 0
curl:(35) 读取 X.509 密钥或证书文件时出错:解密失败。

@dave_thompson_085 指出 curl 不是使用 openssl 构建的,因此

步骤 10:重建 curl。确认此新 curl 使用 openssl

$curl -V curl 7.50.1 (x86_64-pc-linux-gnu) libcurl/7.47.0 OpenSSL/1.0.2g zlib/1.2.8 libidn/1.32 librtmp/2.3
协议:dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp
功能:AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP UnixSockets

步骤 11:使用证书和私钥尝试通过 curl 进行连接:

$ curl -k -vvvvvvhttps://shbr-staging.surescripts.net/rxhub--cert cert2.pem --key sc-private.key
* 尝试 69.25.46.22...
* 连接到 shbr-staging.surescripts.net (69.25.46.22) 端口 443 (#0)
* ALPN,提供 http/1.1
输入 PEM 密码:
* 密码选择:
ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* 成功设置证书验证位置:
* CAfile:/etc/ssl/certs/ca-certificates.crt
CApath:/etc/ssl/certs
* TLSv1.2 (OUT),TLS 标头,证书状态(22):
* TLSv1.2 (OUT),TLS 握手,客户端 hello (1):
* TLSv1.2 (IN),TLS 握手,服务器 hello (2):
* TLSv1.2 (IN),TLS 握手,证书(11):
* TLSv1.2 (IN),TLS 握手,服务器密钥交换 (12):
* TLSv1.2 (IN),TLS 握手,请求 CERT (13):
* TLSv1.2 (IN),TLS 握手,服务器完成 (14):
* TLSv1.2 (OUT),TLS 握手,证书 (11):
* TLSv1.2 (OUT),TLS 握手,客户端密钥交换 (16):
* TLSv1.2 (OUT),TLS 握手,CERT 验证 (15):
* TLSv1.2 (OUT),TLS 更改密码,客户端问候 (1):
* TLSv1.2 (OUT),TLS 握手,完成 (20):
* 连接到 shbr-staging.surescripts.net:443 时出现未知 SSL 协议错误 *
关闭连接 0
curl:(35) 连接到 shbr-staging.surescripts.net:443 时出现未知 SSL 协议错误

为了解决上述问题我尝试了以下策略:

策略1:使用低版本的curl

$curl -V curl 7.45.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 OpenSSL/1.0.2g zlib/1.2.8 libidn/1.32 librtmp/2.3
协议:dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp
功能:AsynchDNS IDN IPv6 大文件 GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP UnixSockets

策略2:使用低版本的openssl

$/usr/local/bin/curl -V
curl 7.50.1 (x86_64-pc-linux-gnu) libcurl/7.50.1 OpenSSL/1.0.1e zlib/1.2.3
协议:dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
功能:IPv6 Largefile NTLM NTLM_WB SSL libz UnixSockets

我使用策略 1 和策略 2 时都遇到了与步骤 11 相同的错误

步骤12:输出

$openssl s_client-connect shbr-staging.surescripts.net:443-key sc-private-key-without-password.pem-cert cert2.pem-servername drone.savantcare.com-state

已连接(00000003)
SSL_connect:before/connect 初始化
SSL_connect:SSLv2/v3 写客户端 hello A
SSL_connect:未知状态
深度=2 C = 美国,O = Surescripts LLC.,OU = Surescripts 认证机构,CN = Surescripts 根认证机构
验证返回:1
深度=1 C = 美国,O = Surescripts LLC.,OU = Surescripts 认证机构,CN = Surescripts 颁发认证机构
验证返回:1
深度 = 0 C = 美国,ST = VA,L = 阿灵顿,O = Surescripts,OU = 运营,CN = shbr-staging.surescripts.net,电子邮件地址 =[电子邮件保护]
验证返回:1
SSL_connect:未知状态
SSL_connect:未知状态
SSL_connect:未知状态
SSL_connect:未知状态
SSL_connect:未知状态
SSL_connect:未知状态
SSL_connect:未知状态
SSL_connect:未知状态
SSL_connect:未知状态
SSL_connect:未知状态
SSL_connect:未知状态下的错误
SSL_connect:未知状态下的错误
写入:errno=104
---
证书链
 0 s:/C=US/ST=VA/L=阿灵顿/O=Surescripts/OU=Operations/CN=shbr-staging.surescripts.net/[电子邮件保护]
   i:/C=US/O=Surescripts LLC./OU=Surescripts 认证机构/CN=Surescripts 颁发认证机构
 1 s:/C=US/O=Surescripts LLC./OU=Surescripts 认证机构/CN=Surescripts 颁发认证机构
   i:/C=US/O=Surescripts LLC./OU=Surescripts 认证机构/CN=Surescripts 根认证机构
 2 s:/C=US/O=Surescripts LLC./OU=Surescripts 认证机构/CN=Surescripts 根认证机构
   i:/C=US/O=Surescripts LLC./OU=Surescripts 认证机构/CN=Surescripts 根认证机构
---
服务器证书
-----开始证书-----
MIIFgzCCBGugAwIBAgIKYMCecAAAAAACazANBgkqhkiG9w0BAQsFADCBjjELMAkG
A1UEBhMCVVMxGTAXBgNVBAoTEFN1cmVzY3JpcHRzIExMQy4xLjAsBgNVBAsTJVN1
cmVzY3JpcHRzIENlcnRpZmljYXRpb24gQXV0aG9yaXRpZXMxNDAyBgNVBAMTK1N1
cmVzY3JpcHRzIElzc3​​VpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTUw
NDI3MjEwOTUxWhcNMTcwNDI2MjEwOTUxWjCBqDELMAkGA1UEBhMCVVMxCzAJBgNV
BAgTAlZBMRIwEAYDVQQHEwlBcmxpbmd0b24xFDASBgNVBAoTC1N1cmVzY3JpcHRz
MRMwEQYDVQQLEwpPcGVyYXRpb25zMSUwIwYDVQQDExxzaGJyLXN0YWdpbmcuc3Vy
ZXNjcmlwdHMubmV0MSYwJAYJKoZIhvcNAQkBFhduZXR3b3JrQHN1cmVzY3JpcHRz
LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPAADCCAQoCggEBAMio25K7vFgmM2v9
VL726msqmZAeAiq2PswOy+KDhRtBJWFfEYRKrhpNU2JwCB7WpnqHzzhsQSDuBTFv
mO6D3mEa5Oo04nBfxg7HDX3INeWWZ5wGzoenD8yc9tvNj157FMbO1I+J4ij2r1sF
f7geo02hctuZMj9qRVlVLZrQrZfRH2XNmyccNtSbX+D+wSqBx1uyqEJQpEsDA4Kj
ZyY1eM1G76y7CvIg2fZ58bD5K5DIBncLRh7oOXgJ/8PBPo27w/QXnn3Vr3g0xJiV
KUbJK4eHBhOStJnvXfDBrubqQ0oqcNxf+USzqX3ZUc26Fg2R7IS/KBhabpS8rCtc
K5UhlScCAwEAAaOCAcUwggHBMB0GA1UdDgQWBBQn9ZUw3rtN8vjOyWe1Od2vGKs8
uTAfBgNVHSMEGDAWgBRUkp4XGGrE3wF7f0vzTnl/B9TzTjBIBgNVHR8EQTA/MD2g
O6A5hjdodHRwOi8vcGtpLnN1cmVzY3JpcHRzLm5ldC9yZXBvc2l0b3J5L1N1cmVz
Y3JpcHRzQ0EuY3JsMIGABggrBgEFBQcBAQR0MHIwQwYIKwYBBQUHMAKGN2h0dHA6
Ly9wa2kuc3VyZXNjcmlwdHMubmV0L3JlcG9zaXRvcnkvU3VyZXNjcmlwdHNDQS5j
cnQwKwYIKwYBBQUHMAGGH2h0dHA6Ly9wa2kuc3VyZXNjcmlwdHMubmV0L29jc3Aw
DgYDVR0PAQH/BA​​QDAgWgMD4GCSsGAQQBgjcVBwQxMC8GJysGAQQBgjcVCITQ+E+D
3v80h/2ZLILPsHmFp4wLgX2FyskYhtbgSAIBZAIBBzAdBgNVHSUEFjAUBggrBgEF
BQcDAgYIKwYBBQUHAwEwGgYDVR0gBBMwETAPBg0rBgEEAYKlT4N9MgEDMCcGCSsG
QQBgjcVCgQaMBgwCgYIKwYBBQUHAwIwCgYIKwYBBQUHAwEwDQYJKoZIhvcNAQEL
BQADggEBAE0vZrTHr8L3UuZrsewuAB2ON9m574UkaUFfOZX8SLUVLHM9UfdKpS/I
vo9fCYG7u4K+itvUqtdWfXKz2zhKCrWMjEh1s4cNWIcnccwCnRt7rFMYl8fGlemO
JzfCnIBYmSYi6QGCmycCtn9rK9Ifgzht3oL0odVsWSPS0XuyexDe5qVwm3gZYYUK
rcRPMx/q8Vads4xB62Y0typC7xRjMkPphUOTz2mvkAuo7BsBV4iogHVt3r7Ie4hz
DzOKokPBnuY7G/qzd+rlMixF3ZhIMogUPdPFHvHCv9D8Rx+Bh5fwsmRf6D4gj11M
rj8qrhfE/hLbhWTNAbra/vcjvhpLRyI=
-----证书结束-----
主题 = / C = US / ST = VA / L = Arlington / O = Surescripts / OU = Operations / CN = shbr-staging.surescripts.net /[电子邮件保护]
发行人=/C=US/O=Surescripts LLC./OU=Surescripts 认证机构/CN=Surescripts 颁发认证机构
---
可接受的客户端证书 CA 名称
/C=US/O=Surescripts LLC./OU=Surescripts 认证机构/CN=Surescripts 颁发认证机构
/C=US/O=Surescripts LLC./OU=Surescripts 认证机构/CN=Surescripts 根认证机构
/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy 安全证书颁发机构 - G2
/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy 根证书颁发机构 - G2
/C=GB/ST=大曼彻斯特/L=索尔福德/O=COMODO CA Limited/CN=COMODO 高保障安全服务器 CA
/C=SE/O=AddTrust AB/OU=AddTrust 外部 TTP 网络/CN=AddTrust 外部 CA 根
/C=GB/ST=大曼彻斯特/L=索尔福德/O=COMODO CA Limited/CN=COMODO RSA 组织验证安全服务器 CA
/C=GB/ST=大曼彻斯特/L=索尔福德/O=COMODO CA Limited/CN=COMODO RSA 认证机构
客户端证书类型:RSA签名、DSA签名、ECDSA签名
请求的签名算法:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA1:DSA+SHA1:ECDSA+SHA1
共享请求的签名算法:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA1:DSA+SHA1:ECDSA+SHA1
对等签名摘要:SHA256
服务器临时密钥:ECDH,P-256,256 位
---
SSL 握手已读取 5394 字节并写入 4213 字节
---
新的 TLSv1/SSLv3,密码为 ECDHE-RSA-AES256-GCM-SHA384
服务器公钥为2048位
支持安全重新协商
压缩:无
扩展:无
未协商 ALPN
SSL 会话:
    协议:TLSv1.2
    密码:ECDHE-RSA-AES256-GCM-SHA384
    会话 ID:
    会话 ID-ctx:
    主密钥:3C3375DE1FAA01C19C37DC6FA4038B4FEA350FF32A4C83F55444A6B63CC95D49F6601B01D9D69BA118BF56EDA9D30709
    关键参数:无
    PSK 身份:无
    PSK 身份提示:无
    SRP 用户名:无
    开始时间:1472462285
    超时:300(秒)
    验证返回代码:0(确定)
---

我究竟做错了什么 ?

相关内容