이 인증서 체인을 확인할 수없는 이유는 무엇입니까? 있습니다. $ openssl

체인에 3 개의 인증서가 있습니다.

  • root.pem
  • intermediate.pem
  • john.pem

그것들을 사용하여 검사 할 때 openssl x509 -in [filename] -text -nooutroot.pem은 자체 서명 된 것처럼 보이며 (Issuer == Subject) 각 인증서의 주제는 예상대로 다음 인증서의 발급자입니다.

실제로 중간 인증서까지 체인을 확인할 수 있습니다.

$ openssl verify -CAfile root.pem root.pem
root.pem: OK
$ openssl verify -CAfile root.pem intermediate.pem
intermediate.pem: OK

그러나 john.pem은 실패합니다.

$ 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

내가 아는 한, 이것은 openssl이 intermediate.pem의 발급자를 찾을 수 없음을 의미합니다. root.pem은 실제로 intermediate.pem의 발급자이므로 의미가 없습니다.

내가 무엇을 놓치고 있습니까?


편집 : 원래 root.pem과 intermediate.pem을 하나의 파일로 연결해야한다는 대답을 게시 한 다음이 파일을에 대한 매개 변수로 사용해야합니다 -CAfile. Johannes Pille이 지적했듯이 이것은 묵시적으로 intermediate.pem을 신뢰하기 때문 입니다. 그가 삭제 한 답변에 게시 한 링크를 읽으십시오 : https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html



답변

인증서를 확인하기 위해 두 인증서를 함께 분류 할 필요는 없습니다.

다음 세 가지 인증서가있는 경우 :

  • root.pem-자체 서명 된 인증서를 저장합니다.
  • intermediate.pem-root.pem이 서명 한 인증서를 저장합니다.
  • john.pem-intermediate.pem이 서명 한 인증서를 저장합니다.

그리고 root.pem 만 신뢰 john.pem하면 다음 명령으로 확인 합니다.

openssl verify -CAfile root.pem -untrusted intermediate.pem john.pem

많은 중간체를 가지고 있었고 -untrusted intermediate2.pem -untrusted intermediate3.pem ...


답변

@ antiduh가 말한 것은 단일 중간 인증서 케이스에서만 작동합니다. -untrusted intermediate.pem명령에 둘 이상을 추가 해도 작동하지 않는 것 같습니다. 특정 openssl 버전과 관련이 있는지 확실하지 않습니다.

openssl 문서에 따르면 : [ https://linux.die.net/man/1/verify]

신뢰할 수없는 파일

신뢰할 수없는 인증서 파일. 파일은 여러 인증서를 포함해야합니다

내 경우에는 다음과 같은 체인이 있습니다.
root.pem -> intermediate1.pem -> intermediate2.pem -> john.pem

cat intermediate1.pem & intermediate2.pem으로 단일 intermediate-chain.pem 파일로 만든 다음 openssl verify -CAfile root.pem -untrusted intermediate-chain.pem john.pem나를 위해 작동합니다.

또한 in ca 확장을 설정해야합니다. basicConstraints = CA:true그렇지 않으면 여전히 openssl verify 보고서 오류가 발생합니다.