Estou tentando gerar um erro de verificação de certificado da openssl s_client
seguinte forma:
$ openssl s_client -crlf -verify 9 \
-CAfile /etc/ssl/certs/TURKTRUST_Certificate_Services_Provider_Root_1.pem \
-starttls smtp -host mx-ha03.web.de -port 25
O certificado do servidor web.de é certificado pela Deutsche Telekom CA, não pela TURKTRUST, portanto, o comando acima deve falhar, certo?
Mas informa:
Verify return code: 0 (ok)
Por quê?
Quero dizer que um comando analógico gnutls-cli falha conforme o esperado:
$ { echo -e 'ehlo example.org\nstarttls' ; sleep 1 } | \
gnutls-cli --starttls --crlf \
--x509cafile /etc/ssl/certs/TURKTRUST_Certificate_Services_Provider_Root_1.pem \
--port 25 mx-ha03.web.de
[..]
*** Verifying server certificate failed...
Fazendo uma verificação cruzada, ou seja, usando em vez disso --x509cafile /etc/ssl/certs/ca-certificates.crt
com gnutls-cli, recebo:
[..]
- The hostname in the certificate matches 'mx-ha03.web.de'.
- Peer's certificate is trusted
(o que também é esperado)
Openssl s_client imprime para ca-certificates.crt:
Verify return code: 0 (ok)
O mesmo resultado que para TURKTRUST ...
Primeiro, suspeitei do openssl usando uma configuração padrão para -CApath
( por exemplo, / etc / ssl / certs) - mas quando eu strace
no processo, apenas vejo o open
syscall para o argumento de CAfile
.
(todos os testes feitos em um servidor Ubuntu 10.04)
Atualização: copiei o certificado TURKTRUST para um sistema Fedora 20 e executei a primeira instrução openssl - lá recebo um resultado diferente:
Verify return code: 19 (self signed certificate in certificate chain)