Eu tenho três certificados em uma cadeia:
- root.pem
- intermediário.pem
- john.pem
Quando os examino, openssl x509 -in [filename] -text -noout
eles parecem bem, o root.pem parece autoassinado (Emissor == Assunto), e o Assunto de cada certificado é o Emissor do próximo, conforme o esperado.
E, de fato, posso verificar a cadeia até o certificado intermediário:
$ openssl verify -CAfile root.pem root.pem
root.pem: OK
$ openssl verify -CAfile root.pem intermediate.pem
intermediate.pem: OK
No entanto, john.pem falha:
$ openssl verify -CAfile root.pem -CAfile intermediate.pem john.pem
john.pem: C = CL, [...redacted data...]
error 2 at 1 depth lookup:unable to get issuer certificate
Que eu saiba, isso significa que o openssl não consegue encontrar o emissor do intermediário.pem. O que não faz sentido, pois o root.pem é realmente o emissor do intermediário.pem.
o que estou perdendo?
Edit: Originalmente, eu tinha postado uma resposta dizendo que root.pem e intermediário.pem devem ser concatenados em um arquivo e, em seguida, deve-se usar esse arquivo como parâmetro para -CAfile
. Isso está errado, porque confia implicitamente no intermediário.pem, como Johannes Pille aponta. Leia o link que ele postou na minha resposta excluída: https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html