체인에 3 개의 인증서가 있습니다.
- root.pem
- intermediate.pem
- john.pem
그것들을 사용하여 검사 할 때 openssl x509 -in [filename] -text -noout
root.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 보고서 오류가 발생합니다.