Estamos com problemas para curl
nã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_NAME
em ssl.h
.
Se eu tentar, openssl s_client -connect the-problem-site.com:443
entã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.0
e está em ca-certificates.crt
. No entanto, tanto quanto posso ver, nem curl nem openssl estão tentando ler nenhum certificado; se eu strace
eles, então não há nenhuma tentativa de ler /usr/lib/ssl/certs
ou /etc/ssl/certs
de 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.cnf
arquivo 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, curl
pega o arquivo de certificados e funciona bem. openssl s_client
ainda não, no entanto. Por que isso seria?