Скручивать с `-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
Поток запросов:
- Завершение SSL происходит на компьютере HAPROXY
- 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
может не работать должным образом с некоторыми конфигурациями прокси. Так что, если вы проходите через какой-то прокси-сервер со стороны клиента и можете каким-то образом тестировать напрямую без прокси-сервера, это, возможно, стоит изучить.