cURL se comporta de maneira diferente em relação aos certificados SSL ao usar o sinalizador -v (detalhado)?

cURL se comporta de maneira diferente em relação aos certificados SSL ao usar o sinalizador -v (detalhado)?

Usando Ubuntu 16.04, curlversão 7.47.0

Estou tentando depurar um problema de certificado SSL e vejo um comportamento estranho ao usar o curl. Quando eu apenas corro:

ubuntu@ip-172-30-0-81:~$ curl https://myapp.com/hello
curl: (51) SSL: certificate subject name (cloud.mynameserver.com) does not match target host name 'myapp.com'

No entanto, quando anexei a -vbandeira:

ubuntu@ip-172-30-0-81:~$ curl -v https://myapp.com/hello
*   Trying {IP REDACTED}...
* Connected to myapp.com ({IP REDACTED}) port 443 (#0)
* found 173 certificates in /etc/ssl/certs/ca-certificates.crt
* found 692 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_256_GCM_SHA384
*    server certificate verification OK
*    server certificate status verification SKIPPED
*    common name: myapp.com (matched)
*    server certificate expiration date OK
*    server certificate activation date OK
*    certificate public key: RSA
*    certificate version: #3
*    subject: CN=myapp.com
*    start date: Sat, 31 Dec 2016 22:57:00 GMT
*    expire date: Fri, 31 Mar 2017 22:57:00 GMT
*    issuer: C=US,O=Let's Encrypt,CN=Let's Encrypt Authority X3
*    compression: NULL
* ALPN, server accepted to use http/1.1
> GET /hello HTTP/1.1
> Host: myapp.com
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.10.0 (Ubuntu)
< Date: Sat, 21 Jan 2017 00:25:15 GMT
< Content-Type: application/json
< Transfer-Encoding: chunked
< Connection: keep-alive
< Strict-Transport-Security: max-age=63072000; includeSubdomains
< X-Frame-Options: DENY
< X-Content-Type-Options: nosniff
<
* Connection #0 to host myapp.com left intact
{"message": "Hello World"}

Observe que o final, {"message": "Hello World"}, é a resposta esperada.

Por que ele curlse comporta de maneira diferente em relação à confiança nos detalhes do certificado SSL, quando executado no modo detalhado? Isso não está especificado na manpágina, até onde eu sei.

Responder1

Parece que você tem dois registros diferentes A(ou AAAApara IPv6) com o mesmo nome de host. Quando há vários registros para um nome de host, isso faz com que cada pesquisa desse nome de host retorne um estilo round-robin de endereço IP diferente.

Quando você alterna solicitações com e sem modo detalhado, o endereço IP também é alternado, fazendo com que as solicitações não detalhadas atinjam o endereço IP errado, enquanto as solicitações detalhadas atingem o endereço IP correto. É por isso que o certificado correto aparece no endereço detalhado de acordo com o

subject: CN=myapp.com

linha, enquanto um certificado diferente é fornecido no erro para o endereço não detalhado.

A solução correta para isso é remover o Aregistro incorreto para que apareçam apenas os endereços dos servidores web configurados para veicular seu conteúdo.

informação relacionada