다음을 통해 공유


SSL 관련 문제 해결(서버 인증서)

카우샬 쿠마르 팬더

이 문제 해결사에서 사용되는 도구:

  • SSLDiag
  • 네트워크 모니터 3.4/Wireshark

이 자료는 정보 제공 목적으로만 제공됩니다. Microsoft는 어떠한 명시적 또는 묵시적 보증도 하지 않습니다.

개요

이 문서는 IIS와 관련된 SSL 문제만 해결하는 데 도움이 됩니다. 클라이언트 인증서 문제 해결은 이 문서에서 다루지 않습니다. 서버 인증서는 서버 인증을 위한 것이며 이 문서에서는 서버 인증서만 처리합니다.

클라이언트 인증서 섹션이 "필요"로 설정된 다음 문제가 발생하면 이 문서를 참조하지 마세요. 이는 SSL 서버 인증서 문제 해결을 위한 것입니다.

모든 인증서는 공개 키(암호화에 사용됨) 및 프라이빗 키(암호 해독에 사용됨)로 구성됩니다. 프라이빗 키는 서버에만 알려져 있습니다.

https의 기본 포트는 443입니다.

나는 독자가 SSL 핸드셰이크 동안 SSL 핸드셰이크 및 서버 인증 프로세스에 정통한 가정하에 있습니다.

SSL(Secure Sockets Layer) 핸드셰이크에 대한 설명:

<https://support.microsoft.com/kb/257591>

SSL 핸드셰이크 중 서버 인증 프로세스에 대한 설명:

<https://support.microsoft.com/kb/257587>

시나리오

https를 통해 웹 사이트를 탐색하는 동안 다음 오류 메시지가 표시됩니다.

Internet Explorer에서 웹 페이지를 표시할 수 없음 메시지를 보여 주는 브라우저 페이지의 스크린샷

가장 먼저 확인해야 할 것은 http를 통해 웹 사이트에 액세스할 수 있는지 여부입니다. 그렇지 않은 경우 여기에서 다루지 않는 별도의 문제가 있을 수 있습니다. 이 문제 해결사를 계속하려면 먼저 웹 사이트가 http에서 작동해야 합니다.

이제 웹 사이트가 http를 통해 액세스할 수 있다고 가정하고 https를 찾아보려고 할 때 위의 오류가 발생합니다. SSL 핸드셰이크가 실패하여 오류 메시지가 표시되었기 때문에 문제가 표시됩니다. 여러 가지 이유가 있을 수 있습니다. 이 문제를 해결하기 위해 단계별 접근 방식을 따릅니다.

시나리오 1

서버 인증서에 해당하는 프라이빗 키가 있는지 확인합니다. 아래 그림을 참조하세요.

인증서 대화 상자의 두 스크린샷. 프라이빗 키가 없습니다. 다른 하나는 프라이빗 키가 인증서에 해당한다는 메시지를 보여줍니다.

프라이빗 키가 누락된 경우 기본적으로 프라이빗 키인 프라이빗 키가 포함된 인증서를 가져와야 합니다. PFX 파일. 프라이빗 키를 인증서와 연결하기 위해 실행할 수 있는 명령이 있습니다.

C:\>certutil –repairstore my "‎1a 1f 94 8b 21 a2 99 36 77 a8 8e b2 3f 42 8c 7e 47 e3 d1 33"

certutil 구문을 보여 주는 명령 콘솔의 스크린샷.

연결이 성공하면 다음 창이 표시됩니다.

명령이 성공적으로 완료되었다는 메시지를 보여 주는 명령 콘솔의 스크린샷.

참고: 1a 1f 94 8b 21 a2 99 36 77 a8e b2 3f 42 8c 7e 47 e3 d1 33은 인증서의 지문입니다. 인증서를 열고 세부 정보 탭을 클릭합니다. 아래로 스크롤하여 지문 섹션을 찾습니다. 지문 섹션을 선택하고 아래 텍스트를 클릭합니다. "Ctrl+A"를 수행하고 "Ctrl+C"를 수행하여 선택하고 복사합니다. 다음은 참조에 대한 스냅샷입니다.

세부 정보 탭을 보여 주는 인증서 대화 상자의 스크린샷 지문 값이 강조 표시됩니다.

참고: 이 명령은 항상 성공하지는 않습니다. 이 오류가 발생하면 CA에서 프라이빗 키가 포함된 인증서를 가져와야 합니다. 프라이빗 키가 포함된 인증서의 파일 확장명은 .pfx입니다.

시나리오 2

첫 번째 장애물을 통과했고 이제 웹 사이트에 프라이빗 키가 포함된 서버 인증서가 설치되었습니다. 그러나 위와 동일한 오류가 발생합니다. 웹 사이트는 여전히 https를 통해 액세스할 수 없습니다.

SSLDiag 도구는 여기에서 편리합니다.

Windows Server 2003:

X64 다운로드(https://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;id=5329)

X86 다운로드(https://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;id=674)

IIS 7 및 IIS 7.5의 경우 vijaysk의 SSL 진단 도구를 사용합니다. 다음은 링크입니다.

https://blogs.msdn.com/b/vijaysk/archive/2009/09/20/ssl-diagnostics-tool-for-iis-7.aspx

도구를 설치하고 서버에서 실행합니다. 프라이빗 키가 포함된 인증서가 있지만 웹 사이트에 액세스할 수 없는 경우 이 도구를 실행하거나 시스템 이벤트 로그에서 SChannel 관련 경고/오류를 확인할 수 있습니다.

SSLDiag 도구를 실행하는 동안 다음 오류가 발생할 수 있습니다.

이 인증서에 해당하는 프라이빗 키가 있지만 CryptAcquireCertificatePrivateKey가 실패했습니다.

SSL 진단 창의 스크린샷. 오류 메시지가 강조 표시됩니다.

아래와 같이 시스템 이벤트 로그에도 SChannel 경고가 표시됩니다.

이벤트 유형: 오류
이벤트 원본: Schannel
이벤트 범주: 없음
이벤트 ID: 36870
날짜: 2012/2/11
시간: 오전 12:44:55
사용자: N/A
컴퓨터:
설명: SSL 서버 자격 증명 프라이빗 키에 액세스하려고 시도하는 동안 심각한 오류가 발생했습니다. 암호화 모듈에서 반환된 오류 코드는 0x80090016.

이 이벤트/오류는 인증서의 프라이빗 키를 획득하는 데 문제가 있음을 나타냅니다. 따라서 아래 단계를 하나씩 시도해 보겠습니다.

  • 첫째, KB 문서에 https://support.microsoft.com/kb/278381따라 machinekeys 폴더에 대한 사용 권한을 확인합니다. 모든 프라이빗 키는 machinekeys 폴더 내에 저장되므로 필요한 권한이 있는지 확인해야 합니다.

  • 사용 권한이 있는 경우 및 문제가 아직 해결되지 않은 경우. 그런 다음 인증서에 문제가 있어야 합니다. 손상되었을 수 있습니다(SChannel 이벤트 로그에 0x8009001a 오류 코드가 표시될 수 있음).

    이벤트 유형: 오류
    이벤트 원본: Schannel
    이벤트 범주: 없음
    이벤트 ID: 36870
    날짜: 2012/2/11
    시간: 오전 12:44:55
    사용자: N/A
    컴퓨터:
    SSL 서버 자격 증명 프라이빗 키에 액세스하려 할 때 심각한 오류가 발생했습니다. 암호화 모듈에서 반환된 오류 코드가 0x8009001a.
  • 웹 사이트가 테스트 인증서와 함께 작동하는지 테스트합니다. 기존 인증서를 백업한 다음 자체 서명된 인증서로 바꿉습니다. https를 통해 웹 사이트에 액세스해 보세요. 작동하면 이전에 사용한 인증서가 손상되어 새 작업 인증서로 바꿔야 합니다.

  • 경우에 따라 인증서가 아니라 발급자에서 문제가 발생할 수 있습니다. SSLDiag에서 다음 오류가 표시 될 수 있습니다.

    오류 메시지가 강조 표시된 SSL 진단 창의 스크린샷

    루트 CA 인증서가 신뢰할 수 있는 루트가 아닌 경우 CertVerifyCertificateChainPolicyCERT_E_UNTRUSTEDROOT(0x800b0109)으로 실패합니다.

    이 문제를 해결하려면 서버의 내 컴퓨터 계정 아래에 있는 "신뢰할 수 있는 루트 CA" 저장소에 CA의 인증서를 추가합니다.

  • 다음 오류가 발생할 수도 있습니다.

    CertVerifyCertificateChainPolicy에서 -2146762480(0x800b0110) 오류를 반환했습니다.

    위의 오류가 수신되면 인증서의 사용 유형을 확인해야 합니다. 인증서를 열고 "세부 정보" 탭을 클릭한 다음 "속성 편집..."을 클릭합니다. 단추. 일반 탭에서 "이 인증서에 대한 모든 용도 사용"이 선택되어 있는지 확인하고 가장 중요한 것은 "서버 인증"이 목록에 있어야 합니다.

    인증서 속성 대화 상자의 일부를 보여 주는 스크린샷. 이 인증서에 대한 모든 용도를 사용하도록 설정이 선택되었습니다.

시나리오 3

처음 2단계는 인증서의 무결성을 확인합니다. 인증서에 문제가 없음을 확인하면 큰 문제가 해결됩니다. 그러나 웹 사이트가 https를 통해 여전히 액세스 할 수 없다면 어떨까요? 웹 사이트의 HTTPS 바인딩을 확인하고 수신 대기 중인 포트 및 IP를 확인합니다. 다음 명령을 실행하여 웹 사이트에서 사용하는 SSL 포트에서 다른 프로세스가 수신 대기하지 않도록 할 수 있습니다.

netstat -ano" or "netstat -anob

해당 포트에서 수신 대기하는 다른 프로세스가 있는 경우 해당 프로세스가 해당 포트를 사용하는 이유를 확인합니다. IP-Port 조합을 변경하여 웹 사이트에 액세스할 수 있는지 여부를 확인합니다.

시나리오 4

이제 웹 사이트에 적절한 작업 인증서가 설치되어 있고 이 웹 사이트에 대한 SSL 포트를 사용하는 다른 프로세스가 없음을 확인합니다. 그러나 https를 통해 액세스하는 동안 "페이지를 표시할 수 없음" 오류가 계속 발생합니다. 클라이언트가 SSL 협상을 연결하고 시작하면 HTTP.sys SSL 구성에서 클라이언트가 연결된 "IP:Port" 쌍을 찾습니다. HTTP.sys SSL 구성에는 SSL 협상이 성공하기 전에 인증서 해시와 인증서 저장소 이름이 포함되어야 합니다. HTTP.SYS SSL 수신기에 문제가 있을 수 있습니다.

  • HTTP.SYS 등록된 인증서 해시가 NULL이거나 잘못된 GUID를 포함할 수 있습니다. 명령 프롬프트에서 다음을 실행합니다.

    IIS 6: "httpcfg.exe query ssl"
    IIS 7/7.5: "netsh http show ssl"
    

    참고

    httpcfg는 Windows 지원 도구의 일부이며 설치 디스크에 있습니다. 여기에서 다운로드할 수도 있습니다. https://www.microsoft.com/download/en/details.aspx?id=7911

    다음은 작업 및 비작업 시나리오의 샘플입니다.

    작업 시나리오:

    구성 설정
    IP 0.0.0.0:443
    Hash
    GUID {00000000-0000-0000-0000-000000000000}
    CertStoreName MY
    CertCheckMode 0
    RevocationFreshnessTime 0
    UrlRetrievalTimeout 0
    SslCtlIdentifier 0
    SslCtlStoreName 0
    플래그 0

    작동하지 않는 시나리오:

    구성 설정
    IP 0.0.0.0:443
    Hash c09b416d6b 8d615db22 64079d15638e96823d
    GUID {4dc3e181-e14b-4a21-b022-59fc669b0914}
    CertStoreName MY
    CertCheckMode 0
    RevocationFreshnessTime 0
    UrlRetrievalTimeout 0
    SslCtlIdentifier 0
    SslCtlStoreName 0
    플래그 0

    위에 표시된 해시 값은 SSL 인증서의 지문입니다. 작동하지 않는 시나리오에서는 Guid가 모두 0입니다. 해시에 값이 있거나 비어 있는 것을 볼 수 있습니다. 웹 사이트에서 인증서를 제거한 다음 "httpcfg 쿼리 ssl"을 실행하더라도 웹 사이트는 여전히 Guid를 모두 0으로 나열합니다. GUID가 "{0000...............000}으로 표시되는 경우 문제가 발생합니다.

    다음 명령을 실행하여 이 항목을 제거해야 합니다.

    httpcfg delete ssl -i "IP:Port Number"
    

    예를 들어:

    httpcfg delete ssl –i 0.0.0.0:443
    
  • IP 수신 대기 목록에서 항목을 삭제합니다.

    IP 주소가 나열되는지 여부를 확인하려면 명령 프롬프트를 열고 다음 명령을 실행합니다.

    IIS 6: httpcfg query iplisten
    
    IIS 7/7.5: netsh http show iplisten
    

    IP 수신 대기 목록이 비어 있으면 명령은 다음 문자열을 반환합니다.

    HttpQueryServiceConfiguration completed with 1168.
    

    명령이 IP 주소 목록을 반환하는 경우 다음 명령을 사용하여 목록에서 각 IP 주소를 제거합니다.

    httpcfg delete iplisten -i x.x.x.x
    

    참고

    "net stop http /y" 명령을 통해 IIS를 다시 시작합니다.

시나리오 5

https에서 웹 사이트를 계속 탐색할 수 없는 경우 클라이언트 또는 서버에서 네트워크 추적을 캡처합니다. "SSL 또는 TLS"로 추적을 필터링하여 SSL 트래픽을 확인합니다.

다음은 작동하지 않는 시나리오의 네트워크 추적 스냅샷입니다.

추적 스냅샷을 보여 주는 필터 표시 창의 스크린샷

작업 시나리오:

성공한 추적의 스냅샷을 보여 주는 필터 표시 창의 스크린샷.

글쎄, 이것은 확실히 지금 당신이 네트워크 추적을 보는 방법입니다. 프레임 세부 정보를 확장하고 서버에서 선택한 프로토콜 및 암호화를 확인해야 합니다. 설명에서 "서버 Hello"를 선택하여 해당 세부 정보를 가져옵니다.

작동하지 않는 시나리오에서 클라이언트는 TLS 1.1 및 TLS 1.2만 사용하도록 구성되었습니다. 그러나 웹 서버는 TLS 1.0까지 지원할 수 있는 IIS 6이므로 핸드셰이크가 실패했습니다.

레지스트리 키를 확인하여 사용하거나 사용하지 않도록 설정된 프로토콜을 확인합니다. 경로는 다음과 같습니다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols

"Enabled" DWORD는 "1"로 설정해야 합니다. "0"이면 프로토콜이 비활성화됩니다.

예를 들어 SSL 2.0은 기본적으로 사용하지 않도록 설정됩니다.

시나리오 6

모든 것이 확인되었으며 https를 통해 웹 사이트에 액세스하는 데 여전히 문제가 있는 경우 SSL 핸드셰이크가 실패하는 일부 업데이트일 가능성이 큽니다.

Microsoft는 Windows에서 SSL 구현에 대한 업데이트를 릴리스했습니다.

MS12-006: Vulnerability in SSL/TLS could allow information disclosure: January 10, 2012

이 업데이트는 Internet Explorer를 사용하거나 Internet Explorer를 사용하여 HTTPS 요청을 수행하는 애플리케이션을 사용하는 고객에게 영향을 미칠 수 있습니다.

실제로 SSL 3.0/TLS 1.0에서 정보 공개 취약성을 해결하기 위해 두 가지 변경이 있었습니다. MS12-006 업데이트는 클라이언트가 해당 동작을 요청할 때 일반적인 SSL 체인 블록 암호화를 사용하는 동안 추가 레코드를 보내는 schannel.dll 새 동작을 구현합니다. 다른 변경 내용은 IE가 새 동작을 요청하기 위해 Internet Explorer(MS11-099)에 대한 12월 누적 업데이트의 일부인 Wininet.dll 변경되었습니다.

문제가 있는 경우 서버에 연결하지 못하거나 불완전한 요청으로 나타날 수 있습니다. Internet Explorer 9에서 "Internet Explorer에서 웹 페이지를 표시할 수 없음" 오류를 표시할 수 있습니다. 이전 버전의 IE는 단순히 빈 페이지를 표시할 수 있습니다.

Fiddler는 HTTPS 요청을 캡처하고 서버에 전달할 때 추가 레코드를 사용하지 않습니다. 따라서 Fiddler를 사용하여 HTTPS 트래픽을 캡처하면 요청이 성공합니다.

레지스트리 키

설명 https://support.microsoft.com/kb/2643584된 대로 다음을 수행할 수 있는 SendExtraRecord 레지스트리 값이 있습니다.

  • 새 SSL 동작을 전역적으로 사용하지 않도록 설정
  • 전역적으로 사용하도록 설정하거나
  • (기본값) 새 동작을 옵트인하는 SChannel 클라이언트에 사용하도록 설정합니다.

Internet Explorer 및 IE 구성 요소를 사용하는 클라이언트의 경우 iexplore.exe 또는 다른 명명된 애플리케이션이 새 동작을 옵트인하는지 여부를 결정하는 FEATURE_SCH_SEND_AUX_RECORD_KB_2618444 FeatureControl 섹션에 레지스트리 키가 있습니다. 기본적으로 Internet Explorer에 대해 사용하도록 설정되며 다른 애플리케이션에서는 사용하지 않도록 설정됩니다.

기타 리소스