我正在尝试连接到: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 cmVzY3JpcHRzIElzc3VpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTUw 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/BAQDAgWgMD4GCSsGAQQBgjcVBwQxMC8GJysGAQQBgjcVCITQ+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(确定) ---
我究竟做错了什么 ?