Se eu tentar acessar nosso servidor HTTPS que possui certificado emitido por certbot do debian 9, recebo o seguinte erro:
# curl -v https://hu.dbpedia.org/
* Trying 195.111.2.82...
* TCP_NODELAY set
* Connected to hu.dbpedia.org (195.111.2.82) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS alert, Server hello (2):
* SSL certificate problem: certificate has expired
* Curl_http_done: called premature == 1
* stopped the pause stream!
* Closing connection 0
curl: (60) SSL certificate problem: certificate has expired
No entanto, se eu tentar o mesmo comando do debian 10, ele será bem-sucedido.
Eu tentei simplesmente copiar todos os certificados ca de uma VM debian 10 para a VM debian 9 (para /usr/local/share/ca-certificates) com rsync e, em seguida, executei o update-ca-certificates
que aparentemente adicionou mais de 400 certificados. Infelizmente, não ajudou. Isso não é de admirar, pois parece que existem os mesmos certificados no debian 9 e 10, aparentemente.
Minha pergunta é : Como posso acessar sites com certificados certbot de máquinas debian 9 sem ignorar completamente a verificação de certificados
Primeiro, o Debian 9 é EOL. Mas, como os clientes podem não estar sob seu controle, é claro que você pode tentar atendê-los nessa ruptura.
Suponho que, embora a pergunta mencione apenas
certbot
, é realmente especificamente sobre o Letsencrypt.(A ferramenta
certbot
em si é um cliente de protocolo ACME que também é usado com outras CAs baseadas em ACME, portanto, há espaço para confusão aqui.)O problema em questão parece ser a combinação de:
Se, em vez disso, você apresentar a nova cadeia de certificados LE que não tenta ser extra compatível, apenas terminando na nova raiz (X1), ela permite que a libssl 1.0 funcione (mas você perde a compatibilidade com o Android realmente antigo).
Fora isso, outras ACs (ACME ou não) são provavelmente a opção a ser considerada.
Aviso! Planeje o caminho de atualização do SO. O conselho abaixo deve ser aplicado apenas em situações de emergência para corrigir rapidamente um sistema crítico.
A solução abaixo funciona no Debian Jessy 8 e também deve estar faltando atualizações no Stretch 9. Acabei de testar em
docker run -it debian:jessie bash
,apt-get update && apt-get install curl
.Antes da:
Primeiro, verifique se você tem o certificado DST Root CA X3 ofensivo presente:
Versões antigas do Debian também têm o ISRG Root X1 adequado:
Isso vai desabilitar o X3:
Seu domínio responde ao curl fine:
Novamente, planeje uma atualização, por favor.
O certificado raiz DST Root CA X3 expirou em 30 de setembro às 14:01:15 de 2021 GMT. Ele foi usado como um dos caminhos de certificação para certificados Let's Encrypt A versão cURL mais antiga tem um bug que fará com que a raiz expirada falhe na conexão em vez de tentar outras raízes no armazenamento ca local.
A partir de 30 de setembro de 2021, a loja ca para curl ( https://curl.se/docs/caextract.html ) ainda contém o certificado raiz DST Root CA X3 expirado, portanto, atualizá-lo não corrigirá o problema. Você pode atualizar seu cURL (o que pode ser bastante desafiador em algumas situações) ou editar o armazenamento ca local (fe /etc/pki/tls/certs/ca-bundle.crt) e remover manualmente o certificado após a linha "DST Root CA X3"
Acabei de ter esse problema com uma imagem do Docker baseada no Debian Stretch. A solução foi fácil, suponho que o Debian tenha corrigido
libssl1.0.2
o problema de seleção de cadeia que Håkan mencionou. No meu caso, atualizar apenas os certificados elibssl1.0.2
rodandoapt install -y libssl1.0.2 ca-certificates
(comapt update
for containers previamente) tem sido suficiente.Para o Debian 8 e 9, eu apenas faço isso para atualizar o certificado no host e não tenho mais o erro 60: problema do certificado SSL: o certificado expirou: https://github.com/xenetis/letsencrypt-expiration
Basta executar, deve funcionar:
Seguindo a resposta de Nicolo 1 , eu executei o script no meu servidor Debian 9 antigo e ainda estava recebendo o mesmo erro de certificado expirado.
update-ca-certificates
página man dizO script que ele compartilhou, a partir de hoje, baixa os certificados ISRG & Let's Encrypt como
.pem
arquivos, portantoupdate-ca-certificates
, não os inclui automaticamente. Depois de fazer um soft link para esses.pem
arquivos, mas com uma.crt
extensão, a execuçãoupdate-ca-certificates
novamente os inclui e o erro de certificado expirado desaparece. Obrigado pela sua resposta!