공개 릴리스용 드라이버 서명
드라이버 패키지를 공개적으로 릴리스하기 전에 패키지를 제출하여 인증받는 것이 좋습니다. 자세한 내용은 Windows 하드웨어 인증 및 하드웨어 대시보드 서비스를 참조하세요. 인증을 위해 드라이버 패키지를 제출하려면 VeriSign 같은 신뢰할 수 있는 인증 기관에서 받은 인증서로 패키지에 서명해야 합니다. 자세한 내용은 VeriSign 인증서 받기를 참조하세요. 또한 Microsoft에서 제공하는 상호 인증서도 필요합니다.
Verisign에서 PVK(개인 키) 파일과 SPC(소프트웨어 게시 인증서) 파일 한 쌍을 받았다고 가정해 봅니다. 또한 MyDriver라는 드라이버 프로젝트와 MyDriver Package라는 드라이버 패키지 프로젝트가 포함된 Microsoft Visual Studio 솔루션이 있다고 가정합니다. 드라이버 패키지에 서명하려면 다음 단계를 수행합니다.
Pvk2Pfx 도구를 사용하여 PFX(개인 정보 교환) 인증서를 만듭니다. Pvk2Pfx 도구는 PVK 및 SPC 파일을 입력 파일로 사용하여 단일 PFX 파일을 만듭니다. 이 연습에서는 PFX 파일의 이름을 MyCert.pfx라고 하겠습니다.
참고 PFX 파일을 만든 후에는 다른 드라이버 프로젝트나 다른 드라이버 개발 컴퓨터에서 다시 사용할 수 있습니다.
필요한 상호 인증서를 확인하려면 커널 모드 코드 서명을 위한 상호 인증서를 참조하세요. 필요한 상호 인증서가 $(BASEDIR)\CrossCertificates에 있는지 확인합니다. 여기서 $(BASEDIR)은 Windows 키트의 기본 디렉터리(예를 들면, c:\Program Files (x86)\Windows Kits\8.0\CrossCertificates)입니다. 이 디렉터리에 필요한 상호 인증서가 없으면 Microsoft에서 해당 상호 인증서를 다운로드하여 $(BASEDIR)\CrossCertificates에 복사합니다.
Visual Studio에서 MyDriver 및 MyDriver Package 프로젝트가 포함된 솔루션을 엽니다. 아직 솔루션 탐색기 창이 열려 있지 않으면 보기 메뉴에서 솔루션 탐색기를 선택합니다. 솔루션 탐색기 창에서 패키지 프로젝트 MyDriver Package를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.
패키지의 속성 페이지에서 구성 속성 > 드라이버 서명 > 일반으로 이동합니다. Sign Mode(서명 모드) 드롭다운 목록에서 **Production Sign(프로덕션 서명)**을 선택합니다. **Production Certificate(프로덕션 인증서)**에서 다음 중 하나를 수행합니다.
서명 인증서의 경로(예를 들면, c:\Certs\MyCert.pfx)를 입력합니다.
파일에서 선택을 선택하고 서명 인증서를 찾습니다.
저장소에서 선택을 선택하고 이전에 인증서 저장소로 가져온 인증서를 선택합니다.
참고 인증서를 저장소로 가져오려면 인증서 파일(PFX 파일)을 마우스 오른쪽 단추로 클릭하고 PFX 설치를 선택합니다. 인증서 가져오기 마법사의 지시를 따릅니다.
참고 나중에 다른 인증서를 사용하려면 인증서 저장소로 새 인증서를 가져와야 합니다. 파일에서 선택을 선택하고 새 인증서를 찾으면 자동으로 새 인증서를 인증서 저장소에 가져옵니다. 그러나 새 인증서의 경로를 직접 입력할 경우에는 자동으로 인증서 저장소에 가져오지 않습니다. 이 경우에는 새 인증서 파일을 마우스 오른쪽 단추로 클릭하고 PFX 설치를 클릭해야 합니다.
드라이버 서명 > 일반 속성 페이지에서 TimeStampServer에 대해 드롭다운 목록에서 타임스탬프 서버 중 하나를 선택합니다.
참고 드롭다운 목록에 있는 타임스탬프 서버 중 하나를 사용하려면 드라이버 패키지를 빌드할 때 인터넷에 연결되어 있어야 합니다. 드라이버 패키지를 빌드할 때 인터넷 연결을 끊어야 하는 경우 TimeStampServer 필드를 지웁니다.
패키지의 속성 페이지에서 구성 속성 > Inf2Cat > 일반으로 이동합니다. Inf2Cat 실행 드롭다운 목록에서 예를 선택합니다.
패키지의 속성 페이지를 닫습니다.
드라이버 프로젝트를 마우스 오른쪽 단추로 클릭하고 MyDriver, 속성을 차례로 선택합니다.
드라이버의 속성 페이지에서 구성 속성 > 드라이버 서명 > 일반으로 이동합니다. TimeStampServer를 드라이버 패키지 속성에 사용한 값과 동일하게 설정합니다. **Sign Mode(서명 모드)**를 **Production Sign(프로덕션 서명)**으로 설정하고, **Production Certificate(프로덕션 인증서)**를 드라이버 패키지 속성에 사용한 값과 동일하게 설정합니다.
드라이버 패키지를 빌드할 준비를 마치면 F5 키를 누릅니다. Visual Studio에서 패키지 및 드라이버 파일을 자동으로 서명합니다. 또한 배포를 구성했다면 Visual Studio에서 서명된 드라이버 패키지를 테스트 컴퓨터로 배포합니다. 자세한 내용은 드라이버 배포 및 테스트를 위한 컴퓨터 프로비전(WDK 8.1)을 참조하세요.
드라이버 패키지 파일 보기
솔루션을 빌드한 후 파일 탐색기에서 드라이버 패키지가 있는 폴더로 이동합니다. 패키지 파일 중 하나는 카탈로그 파일입니다. 카탈로그 파일에는 패키지에 대한 디지털 서명이 포함되어 있습니다. 서명된 패키지에서 파일 보기의 예제는 템플릿을 기반으로 KMDF 드라이버 작성을 참조하세요.
WHQL 릴리스 서명 받기
드라이버 패키지가 인증 테스트를 통과하면 WHQL(Windows Hardware Quality Labs)의 서명을 받을 수 있습니다. WHQL의 서명을 받은 드라이버 패키지는 Windows 업데이트 프로그램 또는 Microsoft에서 지원하는 다른 배포 메커니즘을 통해 배포될 수 있습니다.
패키지 서명과 개별 드라이버 파일 서명 비교
드라이버 패키지는 여러 개의 파일을 포함합니다. 일반적으로 드라이버 패키지는 하나 이상의 드라이버 파일과 정보 파일(INF 파일) 하나, 카탈로그 파일 하나로 구성되며, 카탈로그 파일에는 패키지의 다른 파일에 대한 정보가 있습니다. 카탈로그 파일에 서명할 경우 카탈로그 파일의 서명은 전체 드라이버 패키지에 대한 서명의 역할을 합니다. 즉, 카탈로그 파일에 서명하면 드라이버 패키지에 서명하는 것과 같습니다.
대부분의 경우 드라이버 패키지에 서명하는 것으로 충분하며, 개별 드라이버 파일에 서명할 필요는 없습니다. 그러나 패키지와 개별 드라이버 파일 모두에 서명해야 하는 경우가 종종 있습니다. 예를 들면, 부팅 시작 드라이버 파일은 개별적으로 서명해야 합니다. 개별 드라이버 파일 서명은 드라이버 파일에 서명을 포함하는 것입니다.
MyDriver라는 드라이버 프로젝트와 MyDriver Package라는 드라이버 패키지 프로젝트가 포함된 Visual Studio 솔루션이 있다고 가정합니다. Visual Studio에서는 MyDriver와 My Driver Package 각각에 대해 속성 페이지 집합을 제공합니다. 드라이버 패키지에 서명하려면 My Driver Package의 드라이버 서명 속성을 설정합니다. 개별 드라이버 파일에 서명을 포함하려면 My Driver의 드라이버 서명 속성을 설정합니다.
프로덕션 서명에 대해 드라이버 패키지 속성을 설정하는 경우 그에 따라 개별 드라이버 파일의 서명 속성을 조정합니다. 개별 드라이버 파일의 서명을 끄거나, 개별 드라이버 파일이 패키지에 지정된 것과 동일한 인증서를 사용하도록 설정합니다.
두 개의 서명을 사용하여 드라이버 패키지 서명
경우에 따라 두 개의 다른 서명을 사용하여 드라이버 패키지에 서명해야 할 수 있습니다. 예를 들어, Windows 7과 Windows 8에서 드라이버를 실행하려는 경우를 가정해 봅니다. Windows 8에서는 SHA256 해시 알고리즘을 사용하여 만든 서명을 지원하지만 Windows 7에서는 지원하지 않습니다. Windows 7에 대해서는 SHA1 해시 알고리즘을 사용하여 만든 서명이 필요합니다.
x64 하드웨어 플랫폼에 설치된 Window 7과 Windows 8에서 실행될 드라이버 패키지를 빌드하고 서명하는 것을 가정해 보겠습니다. 먼저 SHA1을 사용하는 주 서명으로 드라이버 패키지에 서명할 수 있습니다. 그런 다음 SHA256을 사용하는 보조 서명을 추가할 수 있습니다. 두 서명에 대해 동일한 인증서를 사용하거나, 별도의 인증서를 사용할 수 있습니다. 아래에 Visual Studio를 사용하여 두 개의 서명을 만드는 단계가 나와 있습니다.
솔루션 탐색기 창에서 솔루션SolutionName을 마우스 오른쪽 단추로 클릭하고 구성 관리자를 선택합니다. 드라이버 프로젝트 및 패키지 프로젝트에서 구성을 Win7 Release로 설정하고 플랫폼을 x64로 설정합니다.
드라이버 패키지의 속성 페이지를 엽니다. 구성 속성 > 드라이버 서명 > 일반으로 이동합니다. Sign Mode(서명 모드) 드롭다운 목록에서 **Production Sign(프로덕션 서명)**을 선택합니다. **Production Certificate(프로덕션 인증서)**에 서명 인증서의 경로를 입력합니다.
드라이버 패키지의 속성 페이지에서 구성 속성 > 사용자 지정 빌드 단계 > 일반으로 이동합니다. 설명에서 사용자 지정 빌드 단계 수행을 선택합니다. **Execute After(다음 단계 후 실행)**에서 DriverProductionSign을 선택합니다. 명령줄에 다음 명령을 입력합니다.
Signtool sign /fd sha256 /ph /as /sha1 XX...XX $(TargetPath)
여기서 XX...XX는 보조 서명에 사용 중인 인증서의 해시입니다.
참고 인증서의 해시(전자 지문이라고도 함)를 보려면 명령 프롬프트 창을 열고 인증서가 있는 디렉터리로 이동합니다. certutil -dump CertName.pfx 명령을 입력합니다. 여기서 CertName.pfx는 인증서의 이름입니다.