파일

파일

인증서 체인이 다음과 같은 경우 관련 게시된 CRL을 고려하여 SSL 인증서를 확인하는 방법을 이해하려고 합니다.

  • 루트 CA(CRL 배포 지점 없음)
    • 중간 CA(루트 CA가 서명한 CRL 배포 지점 공지)
      • 웹사이트 인증서(중간 CA가 서명한 CRL DP 공지)

따라서 두 개의 CRL 목록을 확인해야 합니다.

BBC의 웹사이트가 위와 같이 구성되어 있는 경우가 있으므로 이를 예로 들어보겠습니다. 내가 사용한 파일은 이 질문의 끝에 있습니다.

CRL을 확인하지 않고 인증서를 확인하려고 하면 괜찮습니다.

$ openssl verify -CAfile intermediate_fullchain.pem bbc.pem
bbc.pem: OK

인증서에 제공된 CRL URL에서 CRL을 확인하려고 하면 오류가 발생합니다.

$ openssl verify -crl_download -crl_check_all -CAfile intermediate_fullchain.pem bbc.pem
Error loading CRL from http://crl.globalsign.com/gsrsaovsslca2018.crl
C = GB, ST = London, L = London, O = British Broadcasting Corporation, CN = www.bbc.com
error 3 at 0 depth lookup: unable to get certificate CRL
error bbc.pem: verification failed

openssl은 PEM 형식을 원하는 반면 crl 파일은 DER 형식이므로 이는 이해가 가므로 CRL을 다운로드하여 PEM으로 변환하겠습니다. CRL URL은 다음을 사용하여 찾을 수 있습니다.

$ openssl x509 -in bbc.pem -text -noout
$ openssl x509 -in intermediate_fullchain.pem -text -noout

그런 다음 나는 다음을 수행했습니다.

$ wget -O intermediate_crl.der http://crl.globalsign.com/gsrsaovsslca2018.crl
$ openssl crl -inform DER -in intermediate_crl.der -outform PEM -out intermediate_crl.pem
$ wget -O root_crl.der http://crl.globalsign.com/root-r3.crl
$ openssl crl -inform DER -in root_crl.der -outform PEM -out root_crl.pem

이제 인증서를 검증하는 데 필요한 모든 것이 있다고 생각했습니다.

$ openssl verify -crl_check_all -CRLfile intermediate_crl.pem -CRLfile root_crl.pem -CAfile intermediate_fullchain.pem bbc.pem
OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSign
error 3 at 2 depth lookup: unable to get certificate CRL
error bbc.pem: verification failed

하지만! 여전히 확인에 실패합니다. 내 질문:

  • 위 명령의 문제는 정확히 무엇입니까? 이는 OpenSSL이 루트 CA에 CRL이 있을 것으로 예상한다는 의미입니까?
  • CA 체인에 광고된 두 CRL과 비교하여 인증서를 확인하는 올바른 방법은 무엇입니까?

파일

bbc.pem: 웹서버 인증서:

-----BEGIN CERTIFICATE-----
MIIGQTCCBSmgAwIBAgIMcaxXcd68D+KtpOdTMA0GCSqGSIb3DQEBCwUAMFAxCzAJ
BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSYwJAYDVQQDEx1H
bG9iYWxTaWduIFJTQSBPViBTU0wgQ0EgMjAxODAeFw0yMDA3MjIwNjE2MTJaFw0y
MTA5MDUwOTM2MDRaMHAxCzAJBgNVBAYTAkdCMQ8wDQYDVQQIEwZMb25kb24xDzAN
BgNVBAcTBkxvbmRvbjEpMCcGA1UEChMgQnJpdGlzaCBCcm9hZGNhc3RpbmcgQ29y
cG9yYXRpb24xFDASBgNVBAMTC3d3dy5iYmMuY29tMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEArtLH/eDBkXjRKaXAqNlitSr2AX7dcSxnbfVoUf54aw+B
e216fMXbZIDA6GUL4fcX3vOvl3PKZ4N1dy0dKsFUrnDpbhx8pY6kGk3lSbCnkGxl
BF8upikv8zaoYoCIvDa23u+ySrp36X8AObjYUKTWoMol7LZWVG7CpnI7JT0cqhUM
gxv2kBGhVjMkE+m0CUBj0/iLkgLb+3aUIs3d9Q1OwIvRJ/UFepEcYtejzx5M5RSy
llF4O9C8Cmmhpv04uUH8uAT1itIsvgZeYa00Cdy7cP1Hi7K7tsgZKn6uilN7B49N
NmBDusKuVHrP8v0F2lcTkDOmJ+Zw2c0gJ67wALa9iwIDAQABo4IC+TCCAvUwDgYD
VR0PAQH/BAQDAgWgMIGOBggrBgEFBQcBAQSBgTB/MEQGCCsGAQUFBzAChjhodHRw
Oi8vc2VjdXJlLmdsb2JhbHNpZ24uY29tL2NhY2VydC9nc3JzYW92c3NsY2EyMDE4
LmNydDA3BggrBgEFBQcwAYYraHR0cDovL29jc3AuZ2xvYmFsc2lnbi5jb20vZ3Ny
c2FvdnNzbGNhMjAxODBWBgNVHSAETzBNMEEGCSsGAQQBoDIBFDA0MDIGCCsGAQUF
BwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAIBgZn
gQwBAgIwCQYDVR0TBAIwADA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmds
b2JhbHNpZ24uY29tL2dzcnNhb3Zzc2xjYTIwMTguY3JsMEgGA1UdEQRBMD+CC3d3
dy5iYmMuY29tgg1maWcuYmJjLmNvLnVrggliYmMuY28udWuCDXd3dy5iYmMuY28u
dWuCB2JiYy5jb20wHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1Ud
IwQYMBaAFPjvf/LNeGeo3m+PJI2I8YcDArPrMB0GA1UdDgQWBBSvGSL6A6GbUeKH
HwdxKEWAudpPEDCCAQMGCisGAQQB1nkCBAIEgfQEgfEA7wB1AG9Tdqwx8DEZ2JkA
pFEV/3cVHBHZAsEAKQaNsgiaN9kTAAABc3UqVeQAAAQDAEYwRAIgF7brqFHI/uEo
a+COjDTXQC2V3XozhL8D4mI/IntAF+wCIGf6iKNfKHXWnD0HLYOQCWqkJuoF1yp5
r90GJ8lbjev3AHYAfT7y+I//iFVoJMLAyp5SiXkrxQ54CX8uapdomX4i8NcAAAFz
dSpV8gAABAMARzBFAiEAwkwvvC397cnYRM8FzZ7XoG1L/c/266q+NO+lbiqYStoC
IE6s0LO8vXbbRF+J7DUOoBILKnsIQeTJM058Gf00Q1fAMA0GCSqGSIb3DQEBCwUA
A4IBAQBKUGAEnhZYx0Tb3k1OUXZ2v+/xdVq90bWTJIV6lk7586Cdd88HOR2MzVtX
eKu3fgfGiNXcu6p2DQXPu64pB3np0s5BrRGzMFdH8XyjHocNOa7IsBJCQWj7Vrro
TD3Y01Lafq2LkHl5VFTHGitMK2Ecsxw/CLiBp/pEBcWeE1mp7KRTraT7UptqdLJC
1CVoLhADvK8Ww8LiOE2ka8UZrMY6qGbjCrgBFnnAypa7gbv46iJFJ8uqPnR7+4dq
amxUCPW1nI7MOzZBjHZ9D3KIp+msmtgaJu7/KSEq2Eimp0PBzolbxiIBvmTJ0G9N
EeXysI6nG1L/j5+RWaQIS+r5xRsj
-----END CERTIFICATE-----

intermediate_fullchain.pem: 루트 CA에 대한 체인이 포함된 중간 CA 인증서:

-----BEGIN CERTIFICATE-----
MIIETjCCAzagAwIBAgINAe5fIh38YjvUMzqFVzANBgkqhkiG9w0BAQsFADBMMSAw
HgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFs
U2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjAeFw0xODExMjEwMDAwMDBaFw0yODEx
MjEwMDAwMDBaMFAxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52
LXNhMSYwJAYDVQQDEx1HbG9iYWxTaWduIFJTQSBPViBTU0wgQ0EgMjAxODCCASIw
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKdaydUMGCEAI9WXD+uu3Vxoa2uP
UGATeoHLl+6OimGUSyZ59gSnKvuk2la77qCk8HuKf1UfR5NhDW5xUTolJAgvjOH3
idaSz6+zpz8w7bXfIa7+9UQX/dhj2S/TgVprX9NHsKzyqzskeU8fxy7quRU6fBhM
abO1IFkJXinDY+YuRluqlJBJDrnw9UqhCS98NE3QvADFBlV5Bs6i0BDxSEPouVq1
lVW9MdIbPYa+oewNEtssmSStR8JvA+Z6cLVwzM0nLKWMjsIYPJLJLnNvBhBWk0Cq
o8VS++XFBdZpaFwGue5RieGKDkFNm5KQConpFmvv73W+eka440eKHRwup08CAwEA
AaOCASkwggElMA4GA1UdDwEB/wQEAwIBhjASBgNVHRMBAf8ECDAGAQH/AgEAMB0G
A1UdDgQWBBT473/yzXhnqN5vjySNiPGHAwKz6zAfBgNVHSMEGDAWgBSP8Et/qC5F
JK5NUPpjmove4t0bvDA+BggrBgEFBQcBAQQyMDAwLgYIKwYBBQUHMAGGImh0dHA6
Ly9vY3NwMi5nbG9iYWxzaWduLmNvbS9yb290cjMwNgYDVR0fBC8wLTAroCmgJ4Yl
aHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9yb290LXIzLmNybDBHBgNVHSAEQDA+
MDwGBFUdIAAwNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cuZ2xvYmFsc2lnbi5j
b20vcmVwb3NpdG9yeS8wDQYJKoZIhvcNAQELBQADggEBAJmQyC1fQorUC2bbmANz
EdSIhlIoU4r7rd/9c446ZwTbw1MUcBQJfMPg+NccmBqixD7b6QDjynCy8SIwIVbb
0615XoFYC20UgDX1b10d65pHBf9ZjQCxQNqQmJYaumxtf4z1s4DfjGRzNpZ5eWl0
6r/4ngGPoJVpjemEuunl1Ig423g7mNA2eymw0lIYkN5SQwCuaifIFJ6GlazhgDEw
fpolu4usBCOmmQDo8dIm7A9+O4orkjgTHY+GzYZSR+Y0fFukAj6KYXwidlNalFMz
hriSqHKvoflShx8xpfywgVcvzfTO3PYkz6fiNJBonf6q8amaEsybwMbDqKWwIX7e
SPY=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIETjCCAzagAwIBAgINAe5fFp3/lzUrZGXWajANBgkqhkiG9w0BAQsFADBXMQsw
CQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEQMA4GA1UECxMH
Um9vdCBDQTEbMBkGA1UEAxMSR2xvYmFsU2lnbiBSb290IENBMB4XDTE4MDkxOTAw
MDAwMFoXDTI4MDEyODEyMDAwMFowTDEgMB4GA1UECxMXR2xvYmFsU2lnbiBSb290
IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNp
Z24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDMJXaQeQZ4Ihb1wIO2
hMoonv0FdhHFrYhy/EYCQ8eyip0EXyTLLkvhYIJG4VKrDIFHcGzdZNHr9SyjD4I9
DCuul9e2FIYQebs7E4B3jAjhSdJqYi8fXvqWaN+JJ5U4nwbXPsnLJlkNc96wyOkm
DoMVxu9bi9IEYMpJpij2aTv2y8gokeWdimFXN6x0FNx04Druci8unPvQu7/1PQDh
BjPogiuuU6Y6FnOM3UEOIDrAtKeh6bJPkC4yYOlXy7kEkmho5TgmYHWyn3f/kRTv
riBJ/K1AFUjRAjFhGV64l++td7dkmnq/X8ET75ti+w1s4FRpFqkD2m7pg5NxdsZp
hYIXAgMBAAGjggEiMIIBHjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
/zAdBgNVHQ4EFgQUj/BLf6guRSSuTVD6Y5qL3uLdG7wwHwYDVR0jBBgwFoAUYHtm
GkUNl8qJUC99BM00qP/8/UswPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFo
dHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9yb290cjEwMwYDVR0fBCwwKjAooCag
JIYiaHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9yb290LmNybDBHBgNVHSAEQDA+
MDwGBFUdIAAwNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cuZ2xvYmFsc2lnbi5j
b20vcmVwb3NpdG9yeS8wDQYJKoZIhvcNAQELBQADggEBACNw6c/ivvVZrpRCb8RD
M6rNPzq5ZBfyYgZLSPFAiAYXof6r0V88xjPy847dHx0+zBpgmYILrMf8fpqHKqV9
D6ZX7qw7aoXW3r1AY/itpsiIsBL89kHfDwmXHjjqU5++BfQ+6tOfUBJ2vgmLwgtI
fR4uUfaNU9OrH0Abio7tfftPeVZwXwzTjhuzp3ANNyuXlava4BJrHEDOxcd+7cJi
WOx37XMiwor1hkOIreoTbv3Y/kIvuX1erRjvlJDKPSerJpSZdcfL03v3ykzTr1Eh
kluEfSufFT90y1HonoMOFm8b50bOI7355KKL0jlrqnkckSziYSQtjipIcJDEHsXo
4HA=
-----END CERTIFICATE-----

답변1

파일 intermediate_fullchain.pem에 자체 서명된 루트가 포함되어 있지 않습니다. 나는해야했다올바른 것을 다운로드하세요GlobalSign에서, 귀하의 컴퓨터에 설치되어 있을 수도 있지만, 이 경우 위 체인 파일에서 잘못된 중간 항목을 제거하기만 하면 됩니다.

다음을 통해 중간체를 볼 수 있습니다.

openssl crl2pkcs7 -nocrl -certfile intermediate_chain.pem | openssl pkcs7 -print_certs -noout

이는 다음을 제공합니다:

subject=/C=BE/O=GlobalSign nv-sa/CN=GlobalSign RSA OV SSL CA 2018
issuer=/OU=GlobalSign Root CA - R3/O=GlobalSign/CN=GlobalSign

subject=/OU=GlobalSign Root CA - R3/O=GlobalSign/CN=GlobalSign
issuer=/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA

체인의 두 번째 인증서를 루트 CA 인증서로 교체하거나 시스템에 루트가 설치된 경우 제거해야 합니다. openssl verifyCRL을 찾지 못해 오류가 발생하는 원인이 바로 이것입니다 .

주체 및 권한 키 식별자 확장을 사용하여 체인을 확인할 수 있습니다. 인증서의 AKI(기관 키 식별자)는 서명자(CA)의 SKI(주체 키 식별자)여야 합니다. 따라서 최상위 BBC 인증서의 AKI는 중간 CA F8:EF:7F:F2:CD:78:67:A8:DE:6F:8F:24:8D:88:F1:87:03:02:B3:EB의 SKI입니다 . C=BE, O=GlobalSign nv-sa, CN=GlobalSign RSA OV SSL CA 2018해당 CA 인증서의 AKI는 위의 첫 번째 단락에 링크된 루트 CA 8F:F0:4B:7F:A8:2E:45:24:AE:4D:50:FA:63:9A:8B:DE:E2:DD:1B:BC의 SKI입니다 .OU=GlobalSign Root CA - R3, O=GlobalSign, CN=GlobalSign

그러나 문제를 혼란스럽게 만드는 것은 파일의 두 번째 중간 인증서에도 위에 링크된 루트와 동일한 SKI 및 제목이 있지만 자체 서명되지는 않았다는 것입니다. 해당 인증서의 AKI는 신뢰 앵커 저장소에 있을 수 있는 다른 루트 CA 인증서의 AKI입니다(제 이전 테스트 시스템에는 이 인증서가 없으므로 실패했습니다). 연결된 루트 CA 인증서를 다운로드하지 않으면 경로 길이는 인증서 4개(최종 엔터티 1개, 중간 개체 2개, 루트 1개)이므로 루트 CRL과 각 중간 개체에서 발급한 CRL 3개가 필요합니다.

올바른 연결된 루트를 사용하면 다음을 얻습니다.

openssl verify -crl_check_all -CRLfile all_crl.pem -CAfile intermediate_fullchain.pem bbc.pem
bbc.pem: OK

세 번째 CRL을 찾으려면 동일한 결과를 얻어야 합니다.

관련 정보