Назад | Перейти на главную страницу

Ошибка протокола SSL curl при подключении к shbr-staging.surescripts.net

Я пытаюсь подключиться к: shbr-staging.surescripts.net/

Вот шаги, которым я следовал:

Шаг 1. Я создал закрытый ключ

$ openssl genrsa -des3 -out sc-private.key 2048
кодовая фраза: xyz123

Шаг 2. Использование закрытого ключа из шага 1 сгенерировало CSR и отправило его в скрипты.

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

Шаг 3. Скрипты отправлены мне по электронной почте: drone.sc.com.p7b

Шаг 4: Проверено, что файл drone.sc.com.p7b имеет 3 сертификата

$ openssl pkcs7 -inform der -in drone.sc.com.p7b -print_certs | Меньше

Шаг 5: Из файлов p7b извлеките отдельные сертификаты

$ openssl pkcs7 -inform DER -print_certs -in drone.sc.com.p7b | awk 'split_after == 1 {n ++; split_after = 0} / ----- КОНЕЦ СЕРТИФИКАТА ----- / {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 Certification Authorities / CN = Surescripts Root Certification Authority
эмитент = / C = US / O = Surescripts LLC ./OU=Surescripts Certification Authorities / CN = Surescripts Root Certification Authority

cert1.pem
subject = / C = US / O = Surescripts LLC ./OU=Surescripts Certification Authorities / CN = Surescripts Issuing Certification Authority
эмитент = / C = US / O = Surescripts LLC ./OU=Surescripts Certification Authorities / CN = Surescripts Root Certification Authority

cert2.pem
subject = / C = US / ST = California / L = Los Altos / O = Savant Care, Inc/OU=SC/CN=drone.sc.com/emailAddress=vk@sc.com
эмитент = / C = US / O = Surescripts LLC ./OU=Surescripts Certification Authorities / CN = Surescripts Issuing Certification Authority

Шаг 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 -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 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

Шаг 9: Используя сертификат и закрытый ключ, пытаемся подключиться с помощью curl:

$ curl -k -vvvv https://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)
* найдено 173 сертификата в /etc/ssl/certs/ca-certificates.crt
* найдено 1049 сертификатов в / etc / ssl / certs
* ALPN, предлагающий http / 1.1
* ошибка чтения файла ключа или сертификата X.509: расшифровка не удалась.
* Закрытие соединения 0
curl: (35) ошибка чтения ключа X.509 или файла сертификата: не удалось расшифровать.

@ dave_thompson_085 указал, что curl не построен с использованием openssl, поэтому

Шаг 10: Восстановите локон. Подтверждение того, что этот новый 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 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 -vvvvvv https://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:
* Выбор шифра:
ВСЕ:! EXPORT:! EXPORT40:! EXPORT56:! ANULL:! LOW:! RC4: @STRENGTH
* успешно установлены местоположения проверки сертификата:
* Файл CA: /etc/ssl/certs/ca-certificates.crt
CApath: / etc / ssl / certs
* TLSv1.2 (OUT), заголовок TLS, статус сертификата (22):
* TLSv1.2 (OUT), рукопожатие TLS, привет клиенту (1):
* TLSv1.2 (IN), рукопожатие TLS, привет серверу (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):
* Неизвестная ошибка протокола SSL при подключении к shbr-staging.surescripts.net:443
* Закрытие соединения 0
curl: (35) Неизвестная ошибка протокола SSL в связи с shbr-staging.surescripts.net:443

Чтобы решить вышеуказанные проблемы, я попробовал:

Стратегия 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 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

Стратегия 2: используйте более раннюю версию openssl

$ / usr / местные / 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 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

CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:unknown state
depth=2 C = US, O = Surescripts LLC., OU = Surescripts Certification Authorities, CN = Surescripts Root Certification Authority
verify return:1
depth=1 C = US, O = Surescripts LLC., OU = Surescripts Certification Authorities, CN = Surescripts Issuing Certification Authority
verify return:1
depth=0 C = US, ST = VA, L = Arlington, O = Surescripts, OU = Operations, CN = shbr-staging.surescripts.net, emailAddress = network@surescripts.com
verify return:1
SSL_connect:unknown state
SSL_connect:unknown state
SSL_connect:unknown state
SSL_connect:unknown state
SSL_connect:unknown state
SSL_connect:unknown state
SSL_connect:unknown state
SSL_connect:unknown state
SSL_connect:unknown state
SSL_connect:unknown state
SSL_connect:error in unknown state
SSL_connect:error in unknown state
write:errno=104
---
Certificate chain
 0 s:/C=US/ST=VA/L=Arlington/O=Surescripts/OU=Operations/CN=shbr-staging.surescripts.net/emailAddress=network@surescripts.com
   i:/C=US/O=Surescripts LLC./OU=Surescripts Certification Authorities/CN=Surescripts Issuing Certification Authority
 1 s:/C=US/O=Surescripts LLC./OU=Surescripts Certification Authorities/CN=Surescripts Issuing Certification Authority
   i:/C=US/O=Surescripts LLC./OU=Surescripts Certification Authorities/CN=Surescripts Root Certification Authority
 2 s:/C=US/O=Surescripts LLC./OU=Surescripts Certification Authorities/CN=Surescripts Root Certification Authority
   i:/C=US/O=Surescripts LLC./OU=Surescripts Certification Authorities/CN=Surescripts Root Certification Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIFgzCCBGugAwIBAgIKYMCecAAAAAACazANBgkqhkiG9w0BAQsFADCBjjELMAkG
A1UEBhMCVVMxGTAXBgNVBAoTEFN1cmVzY3JpcHRzIExMQy4xLjAsBgNVBAsTJVN1
cmVzY3JpcHRzIENlcnRpZmljYXRpb24gQXV0aG9yaXRpZXMxNDAyBgNVBAMTK1N1
cmVzY3JpcHRzIElzc3VpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTUw
NDI3MjEwOTUxWhcNMTcwNDI2MjEwOTUxWjCBqDELMAkGA1UEBhMCVVMxCzAJBgNV
BAgTAlZBMRIwEAYDVQQHEwlBcmxpbmd0b24xFDASBgNVBAoTC1N1cmVzY3JpcHRz
MRMwEQYDVQQLEwpPcGVyYXRpb25zMSUwIwYDVQQDExxzaGJyLXN0YWdpbmcuc3Vy
ZXNjcmlwdHMubmV0MSYwJAYJKoZIhvcNAQkBFhduZXR3b3JrQHN1cmVzY3JpcHRz
LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMio25K7vFgmM2v9
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
AQQBgjcVCgQaMBgwCgYIKwYBBQUHAwIwCgYIKwYBBQUHAwEwDQYJKoZIhvcNAQEL
BQADggEBAE0vZrTHr8L3UuZrsewuAB2ON9m574UkaUFfOZX8SLUVLHM9UfdKpS/I
vo9fCYG7u4K+itvUqtdWfXKz2zhKCrWMjEh1s4cNWIcnccwCnRt7rFMYl8fGlemO
JzfCnIBYmSYi6QGCmycCtn9rK9Ifgzht3oL0odVsWSPS0XuyexDe5qVwm3gZYYUK
rcRPMx/q8Vads4xB62Y0typC7xRjMkPphUOTz2mvkAuo7BsBV4iogHVt3r7Ie4hz
DzOKokPBnuY7G/qzd+rlMixF3ZhIMogUPdPFHvHCv9D8Rx+Bh5fwsmRf6D4gj11M
rj8qrhfE/hLbhWTNAbra/vcjvhpLRyI=
-----END CERTIFICATE-----
subject=/C=US/ST=VA/L=Arlington/O=Surescripts/OU=Operations/CN=shbr-staging.surescripts.net/emailAddress=network@surescripts.com
issuer=/C=US/O=Surescripts LLC./OU=Surescripts Certification Authorities/CN=Surescripts Issuing Certification Authority
---
Acceptable client certificate CA names
/C=US/O=Surescripts LLC./OU=Surescripts Certification Authorities/CN=Surescripts Issuing Certification Authority
/C=US/O=Surescripts LLC./OU=Surescripts Certification Authorities/CN=Surescripts Root Certification Authority
/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO High-Assurance Secure Server CA
/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA
/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
Client Certificate Types: RSA sign, DSA sign, ECDSA sign
Requested Signature Algorithms: RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA1:DSA+SHA1:ECDSA+SHA1
Shared Requested Signature Algorithms: RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA1:DSA+SHA1:ECDSA+SHA1
Peer signing digest: SHA256
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 5394 bytes and written 4213 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 3C3375DE1FAA01C19C37DC6FA4038B4FEA350FF32A4C83F55444A6B63CC95D49F6601B01D9D69BA118BF56EDA9D30709
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1472462285
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

Что я делаю не так ?