O cabeçalho do host não tem nada a ver com o SNI. Para usar o SNI, você precisa usar o nome do host no URL, ou seja, usar https://example.com/
em vez de http://1.2.3.4/
(e, claro, usar https: // não http: //).
Mais detalhes: O SNI envia o nome do host dentro do handshake TLS (ClientHello). O servidor escolhe o certificado correto com base nessas informações. Somente depois que a conexão TLS for estabelecida com sucesso, ele enviará a solicitação HTTP, que contém o cabeçalho do Host especificado por você.
Em relação à sua edição / comentários:
- Gostaria de saber como você acessou o site com êxito com o navegador, se não houver entrada de DNS para o host. Se o navegador não souber o nome do host, ele não poderá usar o SNI.
- Se você adicionar o mapeamento de host / ip a
/etc/hosts
, funcionará ao acessarhttps://example.com
com curl porque você sabe que tem o nome do host para SNI e o IP correspondente para a conexão TCP. - Seu código ruby define ssl_client.hostname. Isso não é o mesmo que o cabeçalho do host HTTP que você definiu com o curl.
- Não vejo uma opção para curl onde você pode definir o nome do host para o TLS SNI e o IP para a conexão TCP independentemente.