Faça uma verificação de domínio do certificado SSL

Faça uma verificação de domínio do certificado SSL

Estou tentando criar um script que testará se um site está usando um certificado não autoassinado válido para seu domínio. Significa que não mostraria um aviso no navegador.

Eu tentei com

openssl s_client -connect www.example.com:443 -servername www.example.com

Mesmo que o certificado não seja válido para o domínio, ainda recebo:

Verifique o código de retorno: 0 (ok)

Alguma ideia de como posso conseguir isso?

Responder1

Se você deseja que o openssl realmente verifique o certificado, você precisa instruí-lo a fazer isso.

1. Verificando se o nome do host no certificado corresponde ao nome desejado

Existe uma opção específica para isso, -verify_hostname. No comando abaixo, eu o uso em serverfault.com, mas estou verificando o nome do host example.com:

[jenny@temeraire crt] $ openssl s_client -verify_hostname example.com  -connect serverfault.com:443
CONNECTED(00000003)
[...]
    Verify return code: 62 (Hostname mismatch)
---
DONE

No entanto, o código de retorno do processo em si ainda é 0, o que significa que você deve observar a saída em vez de usar o código de retorno em um teste.

2. Verificando se o certificado é de uma CA confiável

Eu o executei no site serverfault.com, sem fornecer uma lista de CAs confiáveis ​​para verificar novamente, para garantir a falha na verificação:

[jenny@galactica tmp] $ openssl s_client -verify 2 -connect serverfault.com:443
[...]
    Verify return code: 27 (certificate not trusted)

No entanto, o openssl ainda fornecerá o código de retorno 0, já que o comando foi realmente executado corretamente, dificultando o script.

A melhor maneira de fazer isso seria primeiro baixar o certificado e depois executá openssl verify-lo:

[jenny@galactica tmp] $ openssl verify selfsignedcert.pem; echo $?
selfsignedcert.pem: C=SE, O="Nevermind", CN=foo.example.com
error 18 at 0 depth lookup: self signed certificate
18

Como você pode ver, recebi o código de retorno 18, que significa "certificado autoassinado". Existem vários outros códigos de erro; verifique a página de manual para verifyobter mais informações.

informação relacionada