O Google Chrome começará a avisar os usuários de que sua conexão SSL é insegura nas seguintes condições:
- O certificado usa o algoritmo de hash SHA1 e
- O certificado expira em ou após 2016-01-01 (ou 2017-01-01 por diferentes fontes)
Portanto, estou tentando criar um script de método para determinar se um certificado é afetado. Aqui está um exemplo de um certificado SHA1 em outro servidor que mantenho, que expira no prazo 'seguro':
$ curl -v --silent https://example.com/ 2>&1 | grep "expire\|SSL connection using"
* SSL connection using DHE-RSA-AES256-GCM-SHA384
* expire date: 2015-07-20 00:00:00 GMT
Como eu poderia ter determinado que este certificado é SHA1 da string DHE-RSA-AES256-GCM-SHA384
? Isso 256
na string faz com que pareça que está usando um algoritmo de 256 bits, embora eu saiba que não é porque eu mesmo fiz a solicitação de certificado com $ openssl req -new -newkey rsa:2048 -nodes
. Pesquisando, encontrei este recurso ou cifras suportadas , mas não vejo como poderia determinar a força da cifra desse documento.
Como eu poderia determinar a força da cifra via curl, para que eu pudesse fazer o script?
Você não pode. Essa string apenas descreve o conjunto de cifras usado para criptografia e é independente do próprio certificado. Você deve dar uma olhada no certificado, assim:
Observe que não é suficiente verificar se o certificado contém uma assinatura SHA-2. Você precisa verificar se nenhum dos certificados intermediários na cadeia até a raiz está assinado com SHA-1.
O NSS apresenta uma variável de ambiente, NSS_HASH_ALG_SUPPORT , que pode ser usada para controlar quais algoritmos de hash estão disponíveis para os programas que usam a biblioteca. Esta variável de ambiente será respeitada por vários programas, incluindo Firefox, e
curl
se for compilada com suporte NSS (como é, por exemplo, Red Hat Enterprise Linux e Fedora).Se
curl
for compilado com suporte NSS e um certificado SHA-1 estiver em uso, a saída será semelhante a: