Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows 7

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

โดยค่าเริ่มต้น Windows 64-bit ทุกเวอร์ชันจะบล็อกการติดตั้งไดรเวอร์อุปกรณ์ที่ไม่ได้รับการเซ็นด้วยลายเซ็นดิจิทัลที่ถูกต้อง ไดรเวอร์ที่ไม่มีลายเซ็นจะถูกระบบปฏิบัติการบล็อก ลายเซ็นดิจิทัลรับรองว่าไดรเวอร์มาจากนักพัฒนาหรือผู้จัดจำหน่ายที่เชื่อถือได้ และโค้ดไม่ได้ถูกแก้ไข

มีหลายวิธีในการปิดการตรวจสอบลายเซ็นไดรเวอร์สำหรับไดรเวอร์ที่ไม่มีลายเซ็นใน Windows (ใช้ GPO, โหมดบูททดสอบ ฯลฯ) วันนี้เราจะแสดงวิธี เซ็นไดรเวอร์ที่ไม่มีลายเซ็นสำหรับ Windows x64 เอง (คู่มือนี้ใช้ได้กับ Windows 11, 10, 8.1 และ 7)

สารบัญ

  • สร้างใบรับรองเซ็นไดรเวอร์แบบ Self-Signed
  • สร้างไฟล์ Catalog (CAT) สำหรับเซ็นแพ็กเกจไดรเวอร์
  • เซ็นแพ็กเกจไดรเวอร์ด้วยใบรับรอง Self-Signed
  • ติดตั้งไดรเวอร์ที่เซ็นเองบน Windows
  • ไดรเวอร์ User-Mode และ Kernel-Mode ใน Windows

สร้างใบรับรองเซ็นไดรเวอร์แบบ Self-Signed

สมมติว่าคุณมีไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลสำหรับ Windows 10 x64 ในตัวอย่างนี้เป็นไดรเวอร์ของการ์ดจอเก่า ไฟล์ไดรเวอร์สำหรับ Windows ของคุณถูกดาวน์โหลดจากเว็บไซต์ผู้ผลิต (พบไดรเวอร์วิดีโอเฉพาะ Windows Vista x64 เท่านั้น) และแตกไฟล์ไว้ที่ c:\tools\drv1\ ลองติดตั้งไดรเวอร์โดยเพิ่มเข้าไปใน Windows driver store ด้วยเครื่องมือ pnputil ที่มาพร้อมระบบ:
Pnputil –a c:\tools\drv1\xg20gr.inf

หมายเหตุ คำสั่งนี้และคำสั่งต่อไปทั้งหมดต้องรันใน Command Prompt ด้วยสิทธิ์ Administrator

ระหว่างติดตั้งไดรเวอร์ Windows 7 จะแสดงคำเตือนว่าไม่สามารถตรวจสอบลายเซ็นดิจิทัลของไดรเวอร์นี้ได้:

Windows can’t verify the publisher of this driver software.

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

ใน Windows 10 (21H2) คำเตือนนี้ไม่ปรากฏ แต่จะมีข้อผิดพลาดในคอนโซล:

Processing inf: xg20gr.inf Adding the driver package failed: The third-party INF does not contain digital signature information.

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

หากคลิกขวาที่ไฟล์ inf ไดรเวอร์แล้วเลือก Install จาก File Explorer จะได้ข้อผิดพลาด:

The third-party INF does not contain digital signature information.

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

มาเซ็นไดรเวอร์นี้ด้วยใบรับรอง Self-Signed กัน

เครื่องมือที่ต้องการ

เพื่อสร้างลายเซ็นและเซ็นไดรเวอร์ ต้องดาวน์โหลดและติดตั้งเครื่องมือพัฒนาแอปพลิเคชัน Windows ดังนี้:

  • Windows SDK (Software Development Kit) หรือ Microsoft Visual Studio 2005+ สำหรับเวอร์ชัน Windows ของคุณ ติดตั้งแพ็กเกจ Windows SDK Signing tools for Desktop ซึ่งประกอบด้วย signtool.exe;
    วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows
  • Windows Driver Kit (WDK) — https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk

เคล็ดลับ ก่อนติดตั้งเครื่องมือเหล่านี้ ตรวจสอบให้แน่ใจว่า .NET Framework 4 ติดตั้งอยู่ในคอมพิวเตอร์แล้ว

สร้างใบรับรอง Self-Signed ด้วย PowerShell

สร้างโฟลเดอร์ C:\DriverCert ที่รากไดรฟ์ระบบ

ใช้คำสั่ง PowerShell New-SelfSignedCertificate เพื่อสร้างใบรับรอง Code Signing ในตัวอย่างนี้จะสร้างใบรับรอง Self-Signed ที่มีอายุ 3 ปี

$todaydate = Get-Date
$add3year = $todaydate.AddYears(3)
$cert = New-SelfSignedCertificate -Subject "WOSHUB" -Type CodeSigningCert -CertStoreLocation cert:\LocalMachine\My -notafter $add3year

จากนั้นส่งออกใบรับรองเป็นไฟล์ .pfx พร้อมรหัสผ่าน:

$CertPassword = ConvertTo-SecureString -String "P@ss0wrd" -Force –AsPlainText
Export-PfxCertificate -Cert $cert -FilePath C:\DriverCert\myDrivers.pfx -Password $CertPassword

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

เนื่องจากใบรับรองที่สร้างเป็น Self-Signed Windows จึงไมไว้วางใจโดยค่าเริ่มต้น เมื่อตรวจสอบด้วยเครื่องมือ Sigcheck จะแสดงว่าไม่ไว้วางใจ เนื่องจากไม่อยู่ในรายการ Microsoft Trusted Root Certificates (รายการนี้ต้องอัปเดตเป็นระยะ)

ตอนนี้ต้องเพิ่มใบรับรองเข้าไปใน Trusted Root store และ Trusted Publisher certificates:

$certFile = Export-Certificate -Cert $cert -FilePath C:\DriverCert\drivecert.cer
Import-Certificate -CertStoreLocation Cert:\LocalMachine\AuthRoot -FilePath $certFile.FullName
Import-Certificate -CertStoreLocation Cert:\LocalMachine\TrustedPublisher -FilePath $certFile.FullName

วิธีเก่า: ใช้ makecert.exe (สำหรับ Windows เวอร์ชันก่อนหน้า)

ใน Windows เวอร์ชันเก่า ต้องใช้ makecert.exe จาก Windows SDK เพื่อสร้างใบรับรอง Self-Signed คำสั่งจะเป็นดังนี้:

cd "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\bin"

สร้างใบรับรอง Self-Signed และ Private key ที่ออกให้บริษัท WinOSHub:

makecert -r -sv C:\DriverCert\myDrivers.pvk -n CN="WinOSHub" C:\DriverCert\myDrivers.cer

ระหว่างสร้าง จะถามรหัสผ่านสำหรับ key ให้ใช้ P@ss0wrd

สร้าง Public Key สำหรับ Publisher Certificate (PKSC) ที่สร้างไว้ก่อนหน้า:

cert2spc C:\DriverCert\myDrivers.cer C:\DriverCert\myDrivers.spc

รวม Public key (.spc) และ Private key (.pvk) เป็นไฟล์ใบรับรองเดียวแบบ Personal Information Exchange (.pfx):

pvk2pfx -pvk C:\DriverCert\myDrivers.pvk -pi P@ss0wrd -spc C:\DriverCert\myDrivers.spc -pfx C:\DriverCert\myDrivers.pfx -po P@ss0wrd

เพิ่มใบรับรองเข้า Trusted store:

certmgr.exe -add C:\DriverCert\myDrivers.cer -s -r localMachine ROOT
certmgr.exe -add C:\DriverCert\myDrivers.cer -s -r localMachine TRUSTEDPUBLISHER

สามารถปรับใช้ใบรับรองนี้ไปยังคอมพิวเตอร์ไคลเอนต์แบบรวมศูนย์ผ่าน Group Policy ในโดเมน AD

เปิด snap-in จัดการใบรับรองของเครื่องท้องถิ่น (certlm.msc) และตรวจสอบว่าใบรับรองของคุณอยู่ใน Trusted Publishers และ Trusted Root Certification Authorities

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

หมายเหตุ แม้ใบรับรองจะมีอายุจำกัด แต่การหมดอายุของ CodeSigning certificate หมายถึงไม่สามารถสร้างลายเซ็นใหม่ได้ ลายเซ็นของไดรเวอร์ที่เซ็นด้วยใบรับรองนี้แล้วจะยังคงถูกต้องตลอดไป (หรือลายเซ็นเก่ายังคงถูกต้องในช่วง timestamp ที่ระบุ)

สร้างไฟล์ Catalog (CAT) สำหรับเซ็นแพ็กเกจไดรเวอร์

สร้างไดเรกทอรี C:\DriverCert\xg20 และคัดลอกไฟล์ทั้งหมดจากโฟลเดอร์ที่แตกไดรเวอร์จากไฟล์เก็บถาวรไว้ต้นฉบับ (c:\tools\drv1\) ตรวจสอบให้แน่ใจว่ามีไฟล์นามสกุล .sys และ .inf อยู่ในไฟล์เหล่านี้ (ในกรณีนี้คือ xg20grp.sys และ xg20gr.inf)

md C:\DriverCert\xg
xcopy c:\tools\drv1\ C:\DriverCert\xg /i /c /k /e /r /y

เข้าไปในไดเรกทอรี:

cd "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x86"

สร้างไฟล์ CAT (มีข้อมูลเกี่ยวกับไฟล์ทั้งหมดในแพ็กเกจไดรเวอร์) จากไฟล์ INF เครื่องมือ inf2cat.exe (จาก Windows Driver Kit, WDK) ช่วยสร้างไฟล์ CAT สำหรับแพลตฟอร์มของคุณ:

inf2cat.exe /driver:"C:\DriverCert\xg20" /os:7_X64 /verbose

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

เพื่อยืนยันว่าขั้นตอนถูกต้อง ตรวจสอบว่าไฟล์ C:\DriverCert\xg\xg20gr.cat ปรากฏในไดเรกทอรีปลายทาง และมีข้อความในล็อก:

Signability test complete.

และ

Catalog generation complete.

หมายเหตุ ในกรณีของผมคำสั่ง Inf2Cat.exe คืนค่าข้อผิดพลาด:

Signability test failed. Errors: 22.9.7: DriverVer set to incorrect date (must be postdated to 4/21/2009 for newest OS) in \hdx861a.inf

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

เพื่อแก้ไข ให้หาบรรทัดที่มี DriverVer = ในส่วน [Version] และแทนที่ด้วย:

DriverVer=05/01/2009,9.9.9.9

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

หากได้ข้อผิดพลาด Missing AMD64 CatalogFile entry (สำหรับ x64) หรือ Missing 32-bit CatalogFile entry ให้เพิ่มบรรทัด CatalogFile=xg20gr.cat ในส่วน [Version] ของไฟล์ .inf

เซ็นแพ็กเกจไดรเวอร์ด้วยใบรับรอง Self-Signed

เข้าไปในโฟลเดอร์ต่อไปนี้:

cd "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64"

เซ็นแพ็กเกจไดรเวอร์ (ชุดไฟล์) ด้วยใบรับรองที่สร้างไว้ก่อนหน้า ใช้ Verisign เป็นบริการ timestamp คำสั่งต่อไปจะเซ็นไฟล์ CAT ด้วยลายเซ็นดิจิทัลโดยใช้ใบรับรองที่เก็บในไฟล์ .pfx ที่ป้องกันด้วยรหัสผ่าน:

signtool sign /f C:\DriverCert\myDrivers.pfx /p P@ss0wrd /t https://timestamp.verisign.com/scripts/timstamp.dll /v C:\DriverCert\xg20\xg20gr.cat

บน Windows 10 และ Windows 11 รุ่นใหม่ การรันคำสั่งนี้จะได้ข้อผิดพลาด:

SignTool Error: No file digest algorithm specified. Please specify the digest algorithm with the /fd flag. Using /fd SHA256 is recommended and more secure than SHA1. Calling signtool with /fd sha1 is equivalent to the previous behavior. In order to select the hash algorithm used in the signing certificate's signature, use the /fd certHash option.

ต้องใช้คำสั่งอื่นแทน:

signtool sign /tr https://timestamp.digicert.com /td SHA256 /v /f C:\DriverCert\myDrivers.pfx /p P@ss0wrd "C:\DriverCert\xg\xg20gr.cat"

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

หากคำสั่งคืนข้อผิดพลาด SignTool Error: An unexpected internal error has occurred หรือ Error information: SignerTimeStamp() failed. (-2147012865/0x80072eff) ลองใช้ timestamp server URL อื่น ลองจากรายการนี้:

https://timestamp.comodoca.com/authenticode https://timestamp.globalsign.com/scripts/timstamp.dll https://timestamp.verisign.com/scripts/timstamp.dll https://tsa.starfieldtech.com https://www.startssl.com/timestamp

หากเซ็นไฟล์ CAT สำเร็จ จะปรากฏข้อความ:

Successfully signed: C:\DriverCert\xg\xg20gr.cat Number of files successfully Signed: 1

ลายเซ็นดิจิทัลของไดรเวอร์อยู่ในไฟล์ .cat ที่อ้างอิงในไฟล์ .inf สามารถตรวจสอบลายเซ็นดิจิทัลของไดรเวอร์ในไฟล์ cat ได้ด้วยคำสั่ง:

SignTool verify /v /pa c:\DriverCert\xg\xg20gr.cat

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

ยังสามารถดูข้อมูลใบรับรองได้ในคุณสมบัติของไฟล์ CAT ที่แท็บ Digital Signatures

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

หากใบรับรองไมไว้วางใจ (หรือยังไม่ได้เพิ่มเข้า Trusted Root Certificate Store) จะมีข้อผิดพลาดเมื่อรันคำสั่ง SignTool verify:

SignTool Error: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.

ไฟล์ CAT มีลายเซ็นดิจิทัล (thumbprints) ของไฟล์ทั้งหมดในไดเรกทอรีไดรเวอร์ (ไฟล์ที่ระบุในไฟล์ INF ในส่วน CopyFiles) หากไฟล์ใดไฟล์หนึ่งถูกเปลี่ยนแปลง Checksum จะไม่ตรงกับข้อมูลใน CAT file และการติดตั้งไดรเวอร์แบบนั้นจะล้มเหลว

ติดตั้งไดรเวอร์ที่เซ็นเองบน Windows

ลองติดตั้งไดรเวอร์ที่เราเซ็นแล้วอีกครั้งด้วยคำสั่ง:

Pnputil –i –a C:\DriverCert\xg20\xg20gr.inf

ตอนนี้จะไม่เห็นคำเตือนเกี่ยวกับการขาดลายเซ็นดิจิทัลของไดรเวอร์

Successfully installed the driver on a device on the system.
Driver package added successfully.

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

คำเตือนต่อไปนี้ปรากฏใน Windows 10 และ 11:

Would you like to install this device software?

คลิก “Install” เพื่อติดตั้งแพ็กเกจไดรเวอร์บน Windows

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

หากไดรเวอร์ติดตั้งไม่สำเร็จ ล็อกรายละเอียดการติดตั้งไดรเวอร์อยู่ในไฟล์ C:\Windows\inf\setupapi.dev.log ไฟล์ล็อกนี้ช่วยให้ได้ข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดการติดตั้งไดรเวอร์ ในกรณีส่วนใหญ่จะมีข้อผิดพลาด “Driver package failed signature validation” ซึ่งมักหมายถึงใบรับรองของไดรเวอร์ยังไม่ได้ถูกเพิ่มเข้า Trusted Certificates store

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

หากติดตั้งไดรเวอร์สำเร็จ ไฟล์ setupapi.dev.log ควรมีบรรทัดดังนี้:

>>> [Device Install (DiInstallDriver) - C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr.inf] >>> Section start 2018/07/22 23:32:57.015 cmd: Pnputil -i -a c:\DriverCert\xg\xg20gr.inf ndv: Flags: 0x00000000 ndv: INF path: C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr.inf inf: {SetupCopyOEMInf: C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr.inf} 13:23:37.046 inf: Copy style: 0x00000000 inf: Driver Store Path: C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr.inf inf: Published Inf Path: C:\WINDOWS\INF\oem23.inf inf: {SetupCopyOEMInf exit (0x00000000)} 13:23:37.077 <<< Section end 2018/07/22 13:23:37.155 <<< [Exit status: SUCCESS]

ไดรเวอร์ User-Mode และ Kernel-Mode ใน Windows

เตือนอีกครั้งว่าใน Windows ไดรเวอร์สามารถรันใน Kernel-mode หรือ User mode ไดรเวอร์ Kernel-mode ที่เซ็นด้วยวิธีนี้จะไม่โหลดเมื่อ Windows บูทบนอุปกรณ์ UEFI ที่เปิดใช้งาน Secure Boot พร้อมข้อผิดพลาด:

Event ID: 7000 ERROR_DRIVER_BLOCKED 1275 (0x4FB) This driver has been blocked from loading.

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

ตรวจสอบว่า Secure Boot mode เปิดใช้งานอยู่หรือไม่ด้วยคำสั่ง PowerShell:
Confirm-SecureBootUEFI

วิธีเซ็นไดรเวอร์อุปกรณ์ที่ไม่มีลายเซ็นดิจิทัลใน Windows

ไดรเวอร์ Kernel-mode ทั้งหมดที่โหลดเมื่อ SecureBoot เปิดใช้งาน ต้องได้รับการเซ็นในกระบวนการรับรองของ Microsoft (WHQL – Windows Hardware Quality Lab) เหตุผลคือเมื่อ Kernel โหลด UEFI ไม่สามารถตรวจสอบใบรับรองใน Windows local machine certificate store ได้

SignTool Error: Signing Cert does not chain to a Microsoft Code Verification Root.

Microsoft กำหนดให้ต้องมีการรับรองไดรเวอร์ของบุคคลที่สามภายใต้ Windows Hardware Compatibility Program เริ่มจาก Windows 10 1607

ไดรเวอร์ User-mode ที่เซ็นเอง (มักเป็นเครื่องพิมพ์ สแกนเนอร์ โพล็ตเตอร์ ฯลฯ) จะทำงานได้แม้ SecureBoot จะเปิดอยู่
สำหรับไดรเวอร์ Kernel-mode จะต้องปิดการตรวจสอบลายเซ็นดิจิทัลและบูท Windows ใน Test mode ด้วยคำสั่ง bcdedit.exe:
bcdedit.exe /set /nointegritychecks on
bcdedit.exe /set testsigning ON