Я пытаюсь подключиться к: 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) ---
Что я делаю не так ?