릴리스 서명

테스트 서명을 완료하고 드라이버가 릴리스할 준비가 되었는지 확인한 후 드라이버 패키지에 서명해야 합니다. 드라이버 패키지를 서명 후 릴리스할 수 있는 두 가지 방법이 있습니다.

릴리스 서명은 Windows로 로드되는 커널 모드 또는 사용자 모드 이진 파일(예: .sys 또는 .dll 파일)의 게시자를 식별합니다.

커널 모드 이진 파일은 다음 중 하나를 통해 릴리스 서명됩니다.

  1. Windows 하드웨어 품질 랩(WHQL)에서 드라이버 패키지를 서명하여 릴리스합니다. WHQL 릴리스 서명은 Windows 인증 프로그램을 통해 가져옵니다. Windows 하드웨어 호환성 프로그램 인증 프로세스는 Windows 인증 프로그램에서 시작부터 끝까지의 5단계를 설명합니다. 모든 질문은 파트너 센터 대시보드 기술 지원으로 전달되어야 합니다.

  2. WHQL 프로그램을 사용하는 대신 드라이버 개발자 및 공급업체에서 드라이버 패키지를 릴리스할 수 있습니다. 릴리스 서명은 SPC(소프트웨어 게시자 인증서)를 통해 생성됩니다. SPC는 Microsoft 인증 CA(인증 기관)에서 가져옵니다. 이 유형의 SPC로 생성된 서명은 Windows에 대한 PnP 드라이버 서명 요구 사항도 준수합니다.

메서드 2에 대한 드라이버 패키지 서명을 해제하는 데 필요한 단계는 다음과 같습니다.

SPC(소프트웨어 게시자 인증서) 가져오기

릴리스 서명에는 상용 CA의 SPC(소프트웨어 게시자 인증서)라고도 하는 코드 서명 인증서가 필요합니다.

커널 모드 코드 서명에 대한 교차 인증서 기사는 Microsoft에서 인증한 상용 인증 기관(CA) 목록을 제공합니다. 나열된 CA 공급업체는 SPC(소프트웨어 게시자 인증서)를 제공하여 드라이버 패키지 서명을 해제하는 데 사용해야 합니다.

SPC를 획득하고 서명 컴퓨터에 프라이빗 키를 설치하는 방법에 대한 CA의 지침을 따릅니다. SPC는 드라이버 패키지 서명을 요청한 드라이버 공급업체의 독점 기기입니다. SPC, 프라이빗 키 및 암호는 요청 공급업체 조직 외부의 사용자와 공유해서는 안 됩니다.

상호 인증서

소프트웨어 게시자 인증서에서 발췌한 내용:

SPC를 가져오는 것 외에도 Microsoft에서 발급한 교차 인증서를 가져와야 합니다. 교차 인증서는 SPC를 발급한 CA가 신뢰할 수 있는 루트 기관인지 확인하는 데 사용됩니다. 교차 인증서는 다른 CA의 루트 인증서에 대한 공개 키에 서명하는 CA에서 발급한 X.509 인증서입니다. 교차 인증서를 사용하면 시스템에서 신뢰할 수 있는 단일 Microsoft 루트 기관을 가질 수 있지만 SPC를 발급하는 CA(상용 인증 기관)로 신뢰 체인을 확장할 수 있는 유연성도 제공합니다.

게시자는 드라이버 패키지와 함께 교차 인증서를 배포할 필요가 없습니다. 교차 인증서는 드라이버 패키지의 카탈로그 파일에 대한 디지털 서명이나 드라이버 파일에 포함된 서명에 포함됩니다. 드라이버 패키지를 설치하는 사용자는 인증서 간 사용으로 인한 추가 구성 단계를 수행할 필요가 없습니다.

커널 모드 코드 서명을 위한 교차 인증서에서 선택한 발췌:

교차 인증서는 한 CA(인증 기관)에서 발급한 디지털 인증서로, 다른 인증 기관의 루트 인증서에 대한 공개 키에 서명하는 데 사용됩니다. 교차 인증서는 신뢰할 수 있는 단일 루트 CA에서 여러 다른 CA로의 신뢰 체인을 만드는 수단을 제공합니다.

Windows의 교차 인증서:

  • 운영 체제 커널에 신뢰할 수 있는 단일 Microsoft 루트 권한이 있도록 허용합니다.
  • Windows에서 배포, 설치 및 로드를 위해 코드 서명 소프트웨어에 사용되는 SPC(소프트웨어 게시자 인증서)를 발급하는 여러 상용 CA로 신뢰 체인 확장

여기에 제공된 교차 인증서는 커널 모드 소프트웨어에 올바르게 서명하기 위해 WDK(Windows 드라이버 키트) 코드 서명 도구와 함께 사용됩니다. 커널 모드 소프트웨어 디지털 서명은 Windows용으로 게시된 모든 소프트웨어의 코드 서명과 유사합니다. 개발자 또는 소프트웨어 게시자는 커널 모드 소프트웨어에 서명할 때 디지털 서명에 교차 인증서를 추가합니다. 코드 서명 도구는 이진 파일 또는 카탈로그의 디지털 서명에 교차 인증서를 추가합니다.

올바른 교차 인증서 선택

Microsoft는 코드 서명 커널 모드 코드에 대한 SPC를 발급하는 각 CA에 대해 특정 교차 인증서를 제공합니다. 교차 인증서에 대한 자세한 내용은 커널 모드 코드 서명을 위한 교차 인증서를 참조하세요. 이 문서에서는 Microsoft 인증 CA 공급업체의 이름과 SPC를 발급한 루트 기관에 대한 올바른 교차 인증서를 나열합니다. CA 공급업체에서 발급한 SPC에 대한 올바른 교차 인증서를 찾아서 릴리스 서명에 사용하는 서명 컴퓨터에 인증서 간을 다운로드하고 드라이버 디렉터리에 저장합니다. 서명 명령에서 사용할 때 이 인증서의 절대 경로를 제공합니다.

개인 인증서 저장소에 SPC 정보 설치

소프트웨어 게시자 인증서의추가 발췌:

커널 모드 코드 서명 정책을 준수하는 방식으로 SPC를 사용하여 드라이버에 서명하려면 먼저 인증서 정보를 개인 정보 교환(.pfx) 파일에 포함해야 합니다. .pfx 파일에 포함된 정보는 드라이버에 서명하는 로컬 컴퓨터의 개인 인증서 저장소에 추가해야 합니다.

CA는 필요한 인증서 정보를 포함하는 .pfx 파일을 발급할 수 있습니다. 그렇다면 .pfx 파일을 개인 인증서 저장소에 .pfx 파일 설치에 설명된 지침에 따라 개인 인증서 저장소에 추가할 수 있습니다.

그러나 CA는 다음 파일 쌍을 발급할 수 있습니다.

  • 프라이빗 키 정보를 포함하는 .pvk 파일입니다.
  • 공개 키 정보를 포함하는 .spc 또는 .cer 파일입니다.

이 경우 인증서 정보를 개인 인증서 저장소에 추가하려면 파일 쌍(.pvk 및 .spc 또는.pvk 및 .cer)을 .pfx 파일로 변환해야 합니다.

CA에서 발급한 파일 쌍을 이용하여 .pfx 파일을 만들려면 다음 지침을 따르십시오.

  • .pvk 파일 및 .spc 파일을 .pfx 파일로 변환하려면 명령 프롬프트에서 다음 Pvk2Pfx 명령을 사용합니다.

    Pvk2Pfx -pvk mypvkfile.pvk -pi mypvkpassword -spc myspcfile.spc -pfx mypfxfile.pfx -po pfxpassword -f
    
  • .pvk 파일 및 .cer 파일을 .pfx 파일로 변환하려면 명령 프롬프트에서 다음 Pvk2Pfx 명령을 사용합니다.

    Pvk2Pfx -pvk mypvkfile.pvk -pi mypvkpassword -spc mycerfile.cer -pfx mypfxfile.pfx -po pfxpassword -f
    

다음은 Pvk2Pfx 명령에 사용되는 매개 변수에 대해 설명합니다.

  • -pvkmypvkfile.pvk 매개 변수는 .pvk 파일을 지정합니다.
  • -pimypvkpassword 옵션은 에 대한 암호를 지정합니다.pvk 파일입니다.
  • -spcmyspcfile.spc 매개 변수는 .spc 파일을 지정하거나, -spcmycerfile.cer 매개 변수는 .cer 파일을 지정합니다.
  • -pfxmypfxfile.pfx 옵션은 .pfx 파일의 이름을 지정합니다.
  • -popfxpassword 옵션은 .pfx 파일의 암호를 지정합니다.
  • -f 옵션은 기존 .pfx 파일이 있는 경우 Pvk2Pfx를 대체하도록 구성합니다.

중요

강력한 암호로 pvk 및 pfx 파일을 보호해야 합니다.

개인 인증서 저장소에 .pfx 파일 설치

커널 모드 드라이버에 서명하려면 .pfx 파일에 저장된 인증서 및 키를 로컬 개인 인증서 저장소로 가져와야 합니다. Signtool은 커널 모드 드라이버 서명에 .pfx 파일을 사용할 수 없습니다. 이 제한은 .pfx 파일의 인증서를 사용하는 동안 서명에 교차 인증서를 추가하는 과정에서 발생하는 충돌 때문입니다.

소프트웨어 게시자 인증서의 최종 발췌:

CA에서 .pfx 파일을 얻거나, .pvk 파일과 .spc 또는 .cer 파일로부터 .pfx 파일을 생성한 후, 해당 .pfx 파일의 정보를 드라이버에 서명하는 로컬 컴퓨터의 개인 인증서 저장소에 추가하세요. 인증서 가져오기 마법사를 사용하여 다음과 같이 .pfx 파일의 정보를 개인 인증서 저장소로 가져올 수 있습니다.

  1. 인증서 가져오기 마법사를 열려면 Windows 탐색기에서 .pfx 파일을 찾아 파일을 두 번 클릭합니다.
  2. 코드 서명 인증서를 개인 인증서 저장소로 가져오려면 인증서 가져오기 마법사의 절차를 따릅니다.

인증서 저장소로 SPC 가져오기에서 발췌한 내용:

.pfx 파일을 로컬 개인 인증서 저장소로 가져오는 다른 방법은 CertUtil 명령줄 유틸리티를 사용하는 것입니다. 다음 명령줄 예제에서는 CertUtil을 사용하여 abc.pfx 파일을 개인 인증서 저장소로 가져옵니다.

certutil -user -p pfxpassword -importPFX abc.pfx

어디에서

  • -user 옵션은 "현재 사용자" 개인 저장소를 지정합니다.
  • -p 옵션은 .pfx 파일(pfxpassword)의 암호를 지정합니다.
  • -importPFX 옵션은 .pfx 파일(abc.pfx)의 이름을 지정합니다.

SPC 속성 보기

개인 인증서 저장소에서 인증서를 보려면 MMC 인증서 스냅인(certmgr.msc)을 사용합니다.

  1. 인증서 스냅인 certmgr.msc를 시작합니다.
  2. 스냅인의 왼쪽 창에서 개인 인증서 저장소 폴더를 선택합니다.
  3. 인증서 폴더를 선택하고 릴리스 서명에 사용할 인증서를 두 번 클릭합니다.
  4. 필드 목록에서 제목을 선택하여 인증서 대화 상자의 세부 정보 탭에서 인증서의 주체 이름을 강조 표시합니다. 이 주체 이름은 이 섹션의 예제에서 Signtool의 /n 인수와 함께 사용됩니다.

서명

드라이버 패키지의 카탈로그 파일 릴리스 서명에 기반하여:

다음 명령을 실행하여 드라이버 패키지에 서명하는 cat 파일에 서명합니다. /n 명령은 위의 4단계에서 제목 아래에 표시되는 인증서의 따옴표 붙은 이름을 CN= MyCompany Inc.로 사용해야 합니다.

signtool sign /v /ac MSCV-VSClass3.cer /s My /n "MyCompany Inc." /t http://timestamp.digicert.com toaster.cat

/ac FileName

서명 블록에 추가할 다른 인증서가 포함된 파일을 지정합니다. 이 파일은 Microsoft 인증서 간 다운로드 링크에서 가져온 MSCV-VSClass3.cer 교차 서명 인증서입니다. 교차 인증서가 현재 디렉터리에 없는 경우 전체 경로 이름을 사용합니다. 필수는 아니지만 cat 파일에 서명하는 동안 교차 인증서를 추가하는 것이 좋습니다.

/s StoreName

인증서를 검색할 때 열릴 저장소를 지정합니다. 이 옵션을 지정하지 않으면 개인 인증서 저장소인 내 저장소가 열립니다.

/n 과목이름

서명 인증서의 주체 이름을 지정합니다. 이 값은 전체 대상 이름의 부분 문자열일 수 있습니다.

/t URL

타임스탬프 서버의 URL을 지정합니다. 이 옵션이 없으면 서명된 파일은 타임스탬프를 지정하지 않습니다. 타임스탬프를 사용하면 다른 이유로 SPC 서명 인증서가 해지될 때까지 서명된 드라이버 패키지가 무기한 유효합니다.

모든 서명 단계를 올바르게 수행해야 합니다. 그렇지 않으면 드라이버에 서명할 수 없습니다. 다음과 같은 오류가 발생할 수 있습니다.

SignTool Error: No certificates were found that met all the given criteria

서명 삽입

내장 서명을 통한 드라이버 릴리스 서명 기준:

커널 모드 코드 서명 정책은 커널 모드 드라이버가 로드되는지 여부를 제어합니다. 64비트 버전의 Windows에는 32비트 버전의 Windows에 비해 더 엄격한 요구 사항이 있습니다.

커널 모드 부팅 시작 드라이버에는 포함된 SPC(소프트웨어 게시자 인증서) 서명이 있어야 합니다. 이 요구 사항은 PnP 또는 PnP가 아닌 커널 모드 부팅 시작 드라이버에 적용됩니다. 32비트 버전의 Windows에도 적용됩니다. 부팅 시작 드라이버가 아닌 PnP 커널 모드 드라이버에는 포함된 SPC 서명, WHQL 릴리스 서명이 있는 카탈로그 파일 또는 SPC 서명이 있는 카탈로그 파일이 있어야 합니다.

자세한 내용은 커널 모드 코드 서명 요구 사항을 참조 하세요.

toaster.sys 파일 서명을 포함하는 명령입니다.

signtool sign /v /ac MSCV-VSClass3.cer /s my /n "MyCompany Inc. " /t http://timestamp.digicert.com toaster.sys

서명이 완료되면 다음 명령을 실행하여 서명된 드라이버를 확인합니다.

signtool verify /kp /v /c tstamd64.cat toastpkg.inf

명령 출력:

Verifying: toaster.inf
File is signed in catalog: toaster.cat
Hash of file (sha1): AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00

Signing Certificate Chain:

    Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
    Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
    Expires:   Wed Jul 16 15:59:59 2036
    SHA1 hash: BB22CC33DD44EE55FF66AA77BB88CC99DD00EE11

        Issued to: VeriSign Class 3 Code Signing 2010 CA
        Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
        Expires:   Fri Feb 07 15:59:59 2020
        SHA1 hash: CC33DD44EE55FF66AA77BB88CC99DD00EE11FF22

            Issued to: Contoso, Inc
            Issued by: VeriSign Class 3 Code Signing 2010 CA
            Expires:   Thu Dec 04 15:59:59 2014
            SHA1 hash: DD44EE55FF66AA77BB88CC99DD00EE11FF22AA33

The signature is timestamped: Mon Jan 27 14:48:55 2014
Timestamp Verified by:
    Issued to: Thawte Timestamping CA
    Issued by: Thawte Timestamping CA
    Expires:   Thu Dec 31 15:59:59 2020
    SHA1 hash: EE55FF66AA77BB88CC99DD00EE11FF22AA33BB44

        Issued to: Symantec Time Stamping Services CA - G2
        Issued by: Thawte Timestamping CA
        Expires:   Wed Dec 30 15:59:59 2020
        SHA1 hash: FF66AA77BB88CC99DD00EE11FF22AA33BB44CC55

            Issued to: Symantec Time Stamping Services Signer - G4
            Issued by: Symantec Time Stamping Services CA - G2
            Expires:   Tue Dec 29 15:59:59 2020
            SHA1 hash: AA77BB88CC99DD00EE11FF22AA33BB44CC55DD66
Cross Certificate Chain:
    Issued to: Microsoft Code Verification Root
    Issued by: Microsoft Code Verification Root
    Expires:   Sat Nov 01 05:54:03 2025
    SHA1 hash: BB88CC99DD00EE11FF22AA33BB44CC55DD66EE77

 Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
        Issued by: Microsoft Code Verification Root
        Expires:   Mon Feb 22 11:35:17 2021
        SHA1 hash: AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00

            Issued to: VeriSign Class 3 Code Signing 2010 CA
            Issued by: VeriSign Class 3 Public Primary Certification Authority -  G5
            Expires:   Fri Feb 07 15:59:59 2020
            SHA1 hash: CC33DD44EE55FF66AA77BB88CC99DD00EE11FF22

                Issued to: Contoso, Inc
                Issued by: VeriSign Class 3 Code Signing 2010 CA
                Expires:   Thu Dec 04 15:59:59 2014
                SHA1 hash: DD44EE55FF66AA77BB88CC99DD00EE11FF22AA33

Successfully verified: toaster.inf

Number of files successfully Verified: 1
Number of warnings: 0
Number of errors: 0

인증서 체인에 Microsoft 코드 확인 루트가 있는지 확인합니다.

다음으로, toaster.sys 파일의 포함 서명을 확인합니다.

signtool verify /v /kp toaster.sys

명령 출력:

Verifying: toaster.sys Hash of file (sha1): BB22CC33DD44EE55FF66AA77BB88CC99DD00EE11

Signing Certificate Chain:
    Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
    Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
    Expires:   Wed Jul 16 15:59:59 2036
    SHA1 hash: BB22CC33DD44EE55FF66AA77BB88CC99DD00EE11

        Issued to: VeriSign Class 3 Code Signing 2010 CA
        Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
        Expires:   Fri Feb 07 15:59:59 2020
        SHA1 hash: CC33DD44EE55FF66AA77BB88CC99DD00EE11FF22

            Issued to: Contoso, Inc
            Issued by: VeriSign Class 3 Code Signing 2010 CA
            Expires:   Thu Dec 04 15:59:59 2014             SHA1 hash: DD44EE55FF66AA77BB88CC99DD00EE11FF22AA33
The signature is timestamped: Mon Jan 27 14:48:55 2014 Timestamp Verified by:
    Issued to: Thawte Timestamping CA     Issued by: Thawte Timestamping CA     Expires:   Thu Dec 31 15:59:59 2020     SHA1 hash: EE55FF66AA77BB88CC99DD00EE11FF22AA33BB44
        Issued to: Symantec Time Stamping Services CA - G2         Issued by: Thawte Timestamping CA         Expires:   Wed Dec 30 15:59:59 2020         SHA1 hash: FF66AA77BB88CC99DD00EE11FF22AA33BB44CC55
            Issued to: Symantec Time Stamping Services Signer - G4             Issued by: Symantec Time Stamping Services CA - G2             Expires:   Tue Dec 29 15:59:59 2020             SHA1 hash: AA77BB88CC99DD00EE11FF22AA33BB44CC55DD66
Cross Certificate Chain:
    Issued to: Microsoft Code Verification Root     Issued by: Microsoft Code Verification Root     Expires:   Sat Nov 01 05:54:03 2025     SHA1 hash: BB88CC99DD00EE11FF22AA33BB44CC55DD66EE77
        Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
        Issued by: Microsoft Code Verification Root
        Expires:   Mon Feb 22 11:35:17 2021
        SHA1 hash: AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00

            Issued to: VeriSign Class 3 Code Signing 2010 CA
            Issued by: VeriSign Class 3 Public Primary Certification Authority -  G5
            Expires:   Fri Feb 07 15:59:59 2020
            SHA1 hash: CC33DD44EE55FF66AA77BB88CC99DD00EE11FF22
                Issued to: Contoso, Inc                 Issued by: VeriSign Class 3 Code Signing 2010 CA                 Expires:   Thu Dec 04 15:59:59 2014                 SHA1 hash: DD44EE55FF66AA77BB88CC99DD00EE11FF22AA33
Successfully verified: toaster.sys
Number of files successfully Verified: 1 Number of warnings: 0 Number of errors: 0

인증서 체인에 Microsoft 코드 확인 루트가 있는지 다시 확인합니다.