주제에 대한 여러 SO 게시물을 읽었음에도 불구하고(예를 들어그리고예를 들어), openssl s_client -showcerts -servername
잘못된 앵커/루트 인증서가 다운로드되었지만 내 웹 브라우저에는 올바른 앵커/루트 인증서가 표시되었습니다.
# get the chain of certs
[root@server dir]# openssl s_client -connect www.google.com:443 -servername www.google.com -showcerts 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > chain.pem
[root@server dir]#
# save the chain's certs to files: cert.pem (client/leaf) cert1.pem cert2.pem
[root@server dir]# cat chain.pem | awk 'split_after == 1 {n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "cert" n ".pem"}'
[root@server dir]#
# verify fails
[root@server dir]# openssl verify -trusted cert2.pem -untrusted cert1.pem cert.pem
cert.pem: C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
error 2 at 2 depth lookup:unable to get issuer certificate
# verify succeeds
# openssl verify -trusted ANCHOR-FROM-BROWSER.PEM -untrusted cert1.pem cert.pem
cert.pem: OK
Firefox에서는 Google의 앵커/루트 PEM에 "AocvmM"이 포함되어 있다고 올바르게 표시하지만 openssl은 이를 찾을 수 없습니다(CentOS 7.4 및 Ubuntu 16.04.3 LTS, btw에서도 동일한 동작).
[root@server dir]# openssl s_client -connect www.google.com:443 -showcerts -servername www.google.com 2>&1 < /dev/null | grep AocvmM
[root@server dir]#
질문: -showcerts가 표시되지 않는 이유옳은앵커/루트 인증서? 즉, 앵커/루트가 아닌 경우 -showcerts는 어떤 인증서를 표시합니까?
답변1
"번들"(인증서 체인이 있는 파일)에 포함된 인증서 목록은 페이지를 제공하는 웹 서버(아마도 Apache)에 의해 결정됩니다. openssl은 s_client(또는 일반적으로 openssl)가 정확하고 완전한 목록을 수신하는지 여부를 제어할 수 없습니다.
루트 인증서가 필요합니다이 웹사이트에서 찾을 수 있습니다.
다음을 포함한 텍스트 복사
-----BEGIN CERTIFICATE-----
~까지
-----END CERTIFICATE-----
명명된 사람에게equifax.pem
그런 다음 전체 체인을 확인합니다.
$ openssl verify -CAfile equifax.pem -untrusted cert1.pem -untrusted cert2.pem cert.pem
cert.pem: OK
편집하다
이는 Equifax 인증서가 기본 로컬 SSL 인증서 저장소(/etc/ssl/certs/)에 있는 경우에도 작동합니다.
$ openssl verify -untrusted cert1.pem -untrusted cert2.pem cert.pem
cert.pem: OK
Equifax 인증서가 SSL 인증서 디렉터리에 있는지 여부는 별도의 문제입니다. 업데이트할 수 있습니다.