Скручивать с `-k` и без` -k`

Когда я открываю URL с помощью curl без -k, мой запрос проходит, и я вижу ожидаемый результат.

$ curl -vvv https://MYHOSTNAME/wex/archive.info -A SUKU$RANDOM
*   Trying 10.38.202.192...
* Connected to MYHOSTNAME (10.38.202.192) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
* Server certificate: *.MYCNAME
* Server certificate: ProdIssuedCA1
* Server certificate: InternalRootCA
> GET /wex/archive.info HTTP/1.1
> Host: MYHOSTNAME
> User-Agent: SUKU19816
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: nginx/1.10.2
< Date: Thu, 26 Jan 2017 01:08:40 GMT
< Content-Type: text/html;charset=ISO-8859-1
< Content-Length: 19
< Connection: keep-alive
< Set-Cookie: JSESSIONID=1XXXXXXXX3E58093E816FE62D81; Path=/wex/; HttpOnly
< X-WebProxy-Id: 220ffb81872a
< 




status=Running
* Connection #0 to host MYHOSTNAME left intact

Но когда я открываю тот же URL с -k его провал. Для меня это не имеет никакого смысла, так как в моем понимании цель -k только пропустить проверку сертификата

$ curl -vvv https://MYHOSTNAME/wex/archive.info -A SUKU$RANDOM -k
*   Trying 10.38.202.192...
* Connected to MYHOSTNAME (10.38.202.192) port 443 (#0)
* Server aborted the SSL handshake
* Closing connection 0
curl: (35) Server aborted the SSL handshake

Поток запросов:

  1. Завершение SSL происходит на компьютере HAPROXY
  2. HAPROXY перенаправит запрос в nginx

1 ответ

Решение

Для устранения этой проблемы, --resolve Опция может быть полезна:

curl -k -I --resolve www.example.com:80:192.0.2.1 https://www.example.com/

Укажите пользовательский адрес для конкретной пары хоста и порта. Используя это, вы можете заставить запросы curl использовать указанный адрес и запретить использование обычно разрешенного в противном случае адреса. Считайте, что это своего рода альтернатива /etc/hosts, предоставленная в командной строке. Номер порта должен быть номером, используемым для определенного протокола, для которого будет использоваться хост. Это означает, что вам нужно несколько записей, если вы хотите указать адрес одного и того же хоста, но разных портов.

Особенно, если сайт, который вы пытаетесь получить, использует SNI: в этом случае вы можете использовать --resolve возможность указать имя сервера, который будет использоваться в TLS клиенте привет.

Один шаг устранения неполадок, чтобы попробовать: обновить curl или скомпилируйте его самостоятельно из источников и повторите попытку. С одной стороны, некоторые curl версии (например, MacOS) предположительно не отправляют SNI для -k/--insecure,

Если это проблема, которую вы затронули, и вы не можете заменить curl есть обходной путь, который вы можете использовать, который, по сути, включает в себя создание собственного ЦС, закрытых ключей и CSR, а также настройку вашего haproxy.

После настройки, затем вместо указания -k/--insecure, ты используешь --cacert или же --capath:

curl https://example.com/api/endpoint --cacert certs/servers/example.com/chain.pem
curl https://example.com/api/endpoint --capath certs/ca

Если проблема, с которой вы столкнулись, связана с SNI, вы можете также устранить ее с помощью сайта, такого как https://sni.velox.ch/:

curl --insecure https://sni.velox.ch/

В противном случае, если это не SNI, то я вспоминаю, что видел где-то -k/--insecure может не работать должным образом с некоторыми конфигурациями прокси. Так что, если вы проходите через какой-то прокси-сервер со стороны клиента и можете каким-то образом тестировать напрямую без прокси-сервера, это, возможно, стоит изучить.

Другие вопросы по тегам