Estamos com problemas para curlnão conectar a um servidor HTTPS:
$ curl https://the-problem-site.com (not the real URL!)
curl: (35) error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112)
1112 é SSL_R_TLSV1_UNRECOGNIZED_NAMEem ssl.h.
Se eu tentar, openssl s_client -connect the-problem-site.com:443então eu vejo
CONNECTED(00000003)
depth=1 /C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA
verify error:num=20:unable to get local issuer certificate
verify return:0
Certificate chain
0 s:/serialNumber=xx/C=xx/ST=xx/L=xxxx/O=xx/OU=xx/CN=the-problem-site.com
i:/C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA
1 s:/C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA
i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
ou seja, parece que o problema é que não confia /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA. No entanto, esse certificado está instalado: é /etc/ssl/certs/GeoTrust_Global_CA.pem, e se eu correr
openssl s_client -conecte o-problem-site.com:443 -CAfile /etc/ssl/certs/GeoTrust_Global_CA.pem
então tudo funciona. O cert também está presente como um arquivo chamado hash b0f3e76e.0e está em ca-certificates.crt. No entanto, tanto quanto posso ver, nem curl nem openssl estão tentando ler nenhum certificado; se eu straceeles, então não há nenhuma tentativa de ler /usr/lib/ssl/certsou /etc/ssl/certsde todo, nem mesmo com erros. Ele lê openssl.cnf embora. Nós corremos update-ca-certificates.
Este é o Ubuntu 10.04 com o openssl 0.9.8k. Podemos reproduzir o problema em duas instalações separadas (embora seja possível que seja um clone do outro no caminho de volta). Se eu tentar o mesmo teste em uma VM do CentOS com o openssl 0.9.8e, ele funcionará bem e posso vê-lo lendo o arquivo de certificado strace. Não há acesso equivalente a arquivos no mesmo ponto nos traços do Ubuntu. Se eu copiar o openssl.cnfarquivo da CentOS VM para as máquinas Ubuntu, não faz diferença. Não há nada óbvio no ambiente ou em um arquivo .rc que possa estar causando isso.
Alguma idéia do que estou fazendo de errado? Isso deve funcionar, isto é, o openssl e o curl selecionam as CAs instaladas automaticamente na linha de comando? Como isso está configurado? Obrigado!
Outro ponto de dados: em uma instalação limpa de 13 servidores, curlpega o arquivo de certificados e funciona bem. openssl s_clientainda não, no entanto. Por que isso seria?