用`-k`curl并且不用`-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的目的只是跳过证书validation

 $ 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 

请求stream程:

  1. HAPROXY机器上正在进行SSL终止
  2. HAPROXY会将请求转发给nginx

为了解决这类问题,可以使用--resolve选项 :

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

为特定主机和端口对提供自定义地址。 使用这种方法,可以使curl请求使用指定的地址,并防止使用正常解析的地址。 考虑一下在命令行上提供的一种/ etc / hosts替代。 端口号应该是用于主机将被使用的特定协议的号码。 这意味着如果要为同一个主机提供地址但不同的端口,则需要多个条目。

特别是如果你想从中获取的站点使用SNI:在这种情况下,你可以使用--resolve选项来指定在TLS客户端hello中使用的服务器名称。

一个故障排除步骤尝试:更新curl或自己从源编译并重试。 首先,一些curl版本(例如MacOS)据说不会为-k / --insecure发送SNI。

如果这是你遇到的问题,你不能取代curl , 你可以使用一个解决方法 ,主要涉及创建自己的CA和私人密钥和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/这样的网站对其进行疑难解答&#xFF1A;

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

否则,如果不是SNI,那么我记得在某处看到-k / --insecure可能无法像预期的那样使用某些代理配置。 所以如果你正在通过客户端的某种代理,你可以在没有代理的情况下直接进行测试,这可能是值得探讨的。