Я очень смущен этим, и, без сомнения, это мое недоразумение или некоторые такие, но я пытаюсь заставить свою машину говорить с прокси-сервером вверх, я использую redsocks для прозрачно перенаправлять на восходящий поток.curl and openssl видят разные эмитенты
Ниже мы можем увидеть завиток
[email protected]:/# curl -v -k https://bower.herokuapp.com
* Rebuilt URL to: https://bower.herokuapp.com/
* Hostname was NOT found in DNS cache
* Trying 54.235.187.231...
* Connected to bower.herokuapp.com (54.235.187.231) 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, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using TLSv1.2/ECDHE-RSA-AES256-SHA
* Server certificate:
* subject: C=US; ST=California; L=San Francisco; O=Heroku, Inc.; CN=*.herokuapp.com
* start date: 2014-01-21 00:00:00 GMT
* expire date: 2017-05-19 12:00:00 GMT
* issuer: CORPORATE PROXY
Эмитент, как представляется, корпоративный прокси. Нарушение всех сообщений ssl.
[email protected]:/# openssl s_client -connect bower.herokuapp.com:443
CONNECTED(00000003)
depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 High Assurance Server CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
0 s:/C=US/ST=California/L=San Francisco/O=Heroku, Inc./CN=*.herokuapp.com
i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA
Что меня озадачивает, так это то, что у них разные эмитенты. Предоставленный завиток, кажется, скрывает большую часть того, что происходит. Я могу указать корневой путь ca и openssl, и дает мне хорошо, но curl каким-то образом использует другой путь.
Я действительно не уверен, как отлаживать то, что происходит на земле в curl. Я думал, что у меня получится аналогичный эмитент. Возможно, я не понимаю, как работает s_client, кто-нибудь знает, что происходит?
SNI был виновником здесь. –
У меня была такая же проблема в моем собственном клиенте HTTPS (с использованием openssl), и причина была такой же. Проблема была решена путем добавления SSL_set_tlsext_host_name перед подключением. –