ตามค่าเริ่มต้น Windows รุ่น 64 บิตทั้งหมดจะป้องกันการติดตั้งโปรแกรมควบคุมอุปกรณ์ที่ไม่ได้เซ็นชื่อด้วยลายเซ็นดิจิทัลที่ถูกต้อง ไดรเวอร์ที่ไม่ได้ลงนามจะถูกบล็อกโดยระบบปฏิบัติการ ลายเซ็นดิจิทัลช่วยให้แน่ใจว่าไดรเวอร์ได้รับการเผยแพร่โดยผู้พัฒนาหรือผู้จำหน่ายที่เชื่อถือได้ และโค้ดของไดรเวอร์นั้นยังไม่ได้รับการแก้ไข
มีหลายวิธีในการปิดใช้งานการตรวจสอบลายเซ็นไดรเวอร์สำหรับไดรเวอร์ที่ไม่ได้ลงนามใน Windows (โดยใช้ GPO โหมดบูตทดสอบ ฯลฯ) วันนี้เราจะแสดงวิธี เซ็นชื่อไดรเวอร์ที่ไม่ได้ลงนามสำหรับ Windows x64 (คำแนะนำนี้ใช้ได้กับ Windows 11, 10, 8.1 และ 7)
สารบัญ:
- สร้างใบรับรองไดรเวอร์ที่ลงนามเอง
- การสร้างไฟล์แคตตาล็อก (CAT) สำหรับการลงนามในแพ็คเกจไดรเวอร์
- การลงนามในแพ็คเกจไดรเวอร์ด้วยใบรับรองที่ลงนามเอง
- การติดตั้งไดร์เวอร์ Self-Signed บน Windows
- ไดรเวอร์โหมดผู้ใช้และโหมดเคอร์เนลใน Windows
สมมติว่าคุณมีไดรเวอร์อุปกรณ์ที่ไม่ได้ลงนาม (ไม่มีลายเซ็นดิจิทัล) สำหรับ Windows 10 x64 ในตัวอย่างนี้ มันคือไดรเวอร์สำหรับการ์ดกราฟิกที่ค่อนข้างเก่า มีการดาวน์โหลดไฟล์เก็บถาวรพร้อมไดรเวอร์สำหรับเวอร์ชัน Windows ของคุณจากเว็บไซต์ของผู้ขาย (ฉันสามารถค้นหาเวอร์ชันไดรเวอร์วิดีโอสำหรับ Windows Vista x64 เท่านั้น) และเนื้อหานั้นถูกแยกไปยัง c:\tools\drv1\ . มาลองติดตั้งไดรเวอร์โดยเพิ่มลงใน Windows driver store ด้วย pnputil ในตัว เครื่องมือ:Pnputil –a c:\tools\drv1\xg20gr.inf
ระหว่างการติดตั้งไดรเวอร์ Windows 7 จะแสดงคำเตือนว่าระบบปฏิบัติการไม่สามารถตรวจสอบลายเซ็นดิจิทัลของไดรเวอร์นี้ได้:
Windows ไม่สามารถตรวจสอบผู้เผยแพร่ซอฟต์แวร์ไดรเวอร์นี้ได้
ใน Windows 10 (21H2) คำเตือนนี้จะไม่ปรากฏขึ้น แต่มีข้อผิดพลาดปรากฏขึ้นในคอนโซล:
การประมวลผล inf:xg20gr.inf การเพิ่มแพ็คเกจไดรเวอร์ล้มเหลว:INF ของบริษัทอื่นไม่มีข้อมูลลายเซ็นดิจิทัล
หากคุณคลิกขวาที่ไฟล์ไดรเวอร์ inf และเลือก ติดตั้ง เมื่อติดตั้งไดรเวอร์จาก File Explorer คุณจะได้รับข้อผิดพลาด:
INF บุคคลที่สามไม่มีข้อมูลลายเซ็นดิจิทัล
มาลองเซ็นชื่อคนขับนี้ด้วยใบรับรองที่ลงนามเองกันเถอะ
ในการสร้างลายเซ็นและลงนามในไดรเวอร์ คุณต้องดาวน์โหลดและติดตั้งเครื่องมือพัฒนาแอปพลิเคชัน Windows ต่อไปนี้:
- Windows SDK (Software Development Kit) หรือ Microsoft Visual Studio 2005+ สำหรับเวอร์ชัน Windows ของคุณ ติดตั้ง Windows SDK Signing tools สำหรับเดสก์ท็อป แพ็คเกจที่มี
signtool.exe
; - Windows Driver Kit (WDK) — https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
สร้างใบรับรองไดรเวอร์ที่ลงนามเอง
สร้างโฟลเดอร์ C:\DriverCert ที่รูทของไดรฟ์ระบบ
คุณสามารถใช้ cmdlet PowerShell ใหม่ SelfSifgnedCertificate เพื่อสร้างใบรับรองการเซ็นโค้ด ในตัวอย่างนี้ เราจะสร้างใบรับรองที่ลงนามเองโดยมีอายุ 3 ปี
$todaydate =Get-Date
$add3year =$todaydate.AddYears(3)
$cert =New-SelfSignedCertificate - เรื่อง "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 จึงไม่เชื่อถือโดยค่าเริ่มต้น เมื่อคุณตรวจสอบที่เก็บใบรับรองด้วยยูทิลิตี้ Sigcheck ใบรับรองนี้จะแสดงเป็นไม่น่าเชื่อถือ เนื่องจากไม่อยู่ในรายการ Microsoft Trusted Root Certificates (รายการนี้ต้องได้รับการอัปเดตเป็นระยะ)
ตอนนี้ คุณต้องเพิ่มใบรับรองไปยังที่เก็บรากที่เชื่อถือได้และใบรับรองผู้เผยแพร่ที่เชื่อถือได้:
$certFile =Export-Certificate -Cert $cert -FilePath C:\DriverCert\drivecert.cer
Import-Certificate -CertStoreLocation Cert:\LocalMachine\AuthRoot -FilePath $certFile.FullName
Import- ใบรับรอง -CertStoreLocation Cert:\LocalMachine\TrustedPublisher -FilePath $certFile.FullName
ใน Windows เวอร์ชันก่อนหน้า คุณต้องใช้ makecert.exe
เครื่องมือจาก Windows Software Development Kit (SDK) เพื่อสร้างใบรับรองที่ลงนามเอง ในกรณีนี้ คำสั่งสร้างใบรับรองจะมีลักษณะดังนี้:
cd “C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\bin”
สร้างใบรับรองที่ลงนามเองและคีย์ส่วนตัวที่ออกให้ ตัวอย่างเช่น สำหรับบริษัท WinOSHub:
makecert -r -sv C:\DriverCert\myDrivers.pvk -n CN="WinOSHub" C:\DriverCert\myDrivers.cer
ในระหว่างการสร้างใบรับรอง เครื่องมือจะแจ้งให้คุณระบุรหัสผ่านสำหรับคีย์ ปล่อยให้มันเป็น P@ss0wrd .
สร้างคีย์สาธารณะสำหรับใบรับรองผู้เผยแพร่ (PKSC) ที่เราได้สร้างไว้ก่อนหน้านี้:
cert2spc C:\DriverCert\myDrivers.cer C:\DriverCert\myDrivers.spc
รวมพับลิกคีย์ (.spc) และไพรเวตคีย์ (.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
เพิ่มใบรับรองที่เชื่อถือได้:
certmgr.exe - เพิ่ม C:\DriverCert\myDrivers.cer -s -r localMachine ROOT
certmgr.exe - เพิ่ม C:\DriverCert\myDrivers.cer -s -r localMachine TRUSTEDPUBLISHER
คุณสามารถปรับใช้ใบรับรองนี้จากส่วนกลางกับคอมพิวเตอร์ไคลเอนต์โดยใช้นโยบายกลุ่มในโดเมน AD
เปิดสแน็ปอินการจัดการใบรับรองในเครื่อง (certlm.msc
) และตรวจสอบว่าใบรับรองของคุณอยู่ใน Trusted Publishers และ Trusted Root Certification Authorities
หมายเหตุ . แม้ว่าใบรับรองจะมีระยะเวลาจำกัด แต่การหมดอายุของใบรับรอง CodeSigning หมายความว่าคุณไม่สามารถสร้างลายเซ็นใหม่ได้ ความถูกต้องของไดรเวอร์ที่ลงนามโดยใบรับรองนี้แล้วนั้นไม่จำกัด (หรือลายเซ็นเก่าใช้ได้ในช่วงเวลาที่ระบุ)
การสร้างไฟล์แคตตาล็อก (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
เพื่อให้แน่ใจว่าขั้นตอนถูกต้อง ให้ตรวจสอบว่าไฟล์ C:\DriverCert\xg\xg20gr.cat ปรากฏในไดเรกทอรีเป้าหมายและมีข้อความอยู่ในบันทึก:
การทดสอบความสามารถในการลงนามเสร็จสมบูรณ์
และ
สร้างแคตตาล็อกเสร็จสมบูรณ์หมายเหตุ . ในกรณีของฉัน คำสั่ง Inf2Cat.exe ส่งคืนข้อผิดพลาด:
การทดสอบความสามารถในการลงนามล้มเหลว ข้อผิดพลาด:22.9.7:DriverVer ตั้งค่าเป็นวันที่ที่ไม่ถูกต้อง (ต้องลงรายการบัญชีเป็นวันที่ 4/21/2009 สำหรับระบบปฏิบัติการใหม่ล่าสุด) ใน \hdx861a.inf
ในการแก้ไขข้อผิดพลาด ให้ค้นหาบรรทัดที่มี DriverVer =ใน [Version]
และแทนที่ด้วย:
DriverVer=05/01/2009,9.9.9.9
หากคุณได้รับข้อผิดพลาด ไม่มีรายการ AMD64 CatalogFile
(สำหรับ x64) หรือ ไม่มีรายการ CatalogFile แบบ 32 บิต
จากนั้นเพิ่มบรรทัด CatalogFile=xg20gr.cat ในส่วน [Version] ของไฟล์ .inf
การลงนามในแพ็คเกจไดรเวอร์ด้วยใบรับรองที่ลงนามเอง
ไปที่โฟลเดอร์ต่อไปนี้:
cd "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64"
ลงนามในแพ็คเกจไดรเวอร์ (ชุดของไฟล์) ด้วยใบรับรองที่คุณสร้างไว้ก่อนหน้านี้โดยใช้ Verisign เป็นบริการประทับเวลา คำสั่งต่อไปนี้จะลงนามในไฟล์ CAT ด้วยลายเซ็นดิจิทัลโดยใช้ใบรับรองที่จัดเก็บไว้ในไฟล์ .pfx ที่ป้องกันด้วยรหัสผ่าน:
เครื่องหมาย signtool /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:ไม่ได้ระบุอัลกอริธึมการแยกไฟล์ โปรดระบุอัลกอริทึมไดเจสต์ด้วยแฟล็ก /fd แนะนำให้ใช้ /fd SHA256 และปลอดภัยกว่า SHA1 การเรียก signtool ด้วย /fd sha1 นั้นเทียบเท่ากับพฤติกรรมก่อนหน้านี้ ในการเลือกอัลกอริทึมการแฮชที่ใช้ในลายเซ็นของใบรับรองการลงนาม ให้ใช้ตัวเลือก /fd certHash
คุณต้องใช้คำสั่งอื่น:
สัญญาณเครื่องมือ signtool /tr https://timestamp.digicert.com /td SHA256 /v /f C:\DriverCert\myDrivers.pfx /p P@ss0wrd "C:\DriverCert\xg\xg20gr.cat"รหัส>
หากคำสั่งส่งคืนข้อผิดพลาด
SignTool Error:เกิดข้อผิดพลาดภายในที่ไม่คาดคิด
หรือ ข้อมูลข้อผิดพลาด:SignerTimeStamp() ล้มเหลว (-2147012865/0x80072eff)
ให้ลองใช้ URL เซิร์ฟเวอร์ประทับเวลาอื่น ลองใช้รายการใดก็ได้: https://timestamp.comodoca.com/authenticodehttps://timestamp.globalsign.com/scripts/timstamp.dllhttps://timestamp.verisign.com/scripts/timstamp.dllhttps://tsa.starfieldtech.comhttps://tsa.starfieldtech.comhttps://tsa.starfieldtech.com ://www.startssl.com/timestamp
หากไฟล์ CAT ได้รับการลงนามเรียบร้อยแล้ว ข้อความต่อไปนี้ควรปรากฏขึ้น:
เซ็นชื่อสำเร็จแล้ว:C:\DriverCert\xg\xg20gr.catNumber ของไฟล์ที่ลงชื่อสำเร็จ:1
ลายเซ็นดิจิทัลของไดรเวอร์มีอยู่ในไฟล์ .cat ที่อ้างอิงในไฟล์ .inf คุณสามารถตรวจสอบลายเซ็นดิจิทัลของไดรเวอร์ในไฟล์ cat ได้โดยใช้คำสั่งต่อไปนี้:
ยืนยัน SignTool /v /pa c:\DriverCert\xg\xg20gr.cat
คุณยังสามารถดูข้อมูลเกี่ยวกับใบรับรองในคุณสมบัติของไฟล์ CAT ได้ใน ลายเซ็นดิจิทัล แท็บ
หากใบรับรองไม่น่าเชื่อถือ (หรือยังไม่ได้เพิ่มไปยัง Trusted Root Certificate Store) ข้อผิดพลาดจะปรากฏขึ้นเมื่อเรียกใช้ SignTool Verify
คำสั่ง:
ข้อผิดพลาด SignTool:ห่วงโซ่ใบรับรองประมวลผลแล้ว แต่สิ้นสุดในใบรับรองหลักที่ผู้ให้บริการเชื่อถือไม่เชื่อถือไฟล์ CAT มีลายเซ็นดิจิทัล (ภาพขนาดย่อ) ของไฟล์ทั้งหมดที่อยู่ในไดเร็กทอรีไดรเวอร์ (ไฟล์ที่อยู่ในไฟล์ INF ใน CopyFiles ส่วน). หากไฟล์เหล่านี้มีการเปลี่ยนแปลง การตรวจสอบของไฟล์จะไม่ตรงกับข้อมูลในไฟล์ CAT และด้วยเหตุนี้ การติดตั้งไดรเวอร์ดังกล่าวจะล้มเหลว
การติดตั้งไดร์เวอร์ Self-Signed บน Windows
ลองติดตั้งไดรเวอร์ที่เราได้ลงนามอีกครั้งโดยใช้คำสั่ง:
Pnputil –i –a C:\DriverCert\xg20\xg20gr.inf
ตอนนี้ คุณจะไม่เห็นคำเตือนเกี่ยวกับลายเซ็นดิจิทัลที่หายไปของไดรเวอร์
ติดตั้งไดรเวอร์บนอุปกรณ์ในระบบเรียบร้อยแล้ว
เพิ่มแพ็คเกจไดรเวอร์เรียบร้อยแล้ว
คำเตือนต่อไปนี้ปรากฏใน Windows 10 และ 11:
คุณต้องการติดตั้งซอฟต์แวร์อุปกรณ์นี้หรือไม่
คลิก “ติดตั้ง” เพื่อติดตั้งแพ็คเกจไดรเวอร์บน Windows
หากไม่ได้ติดตั้งไดรเวอร์ด้วยเหตุผลบางประการ บันทึกการติดตั้งไดรเวอร์โดยละเอียดจะอยู่ในไฟล์ C:\Windows\inf\setupapi.dev.log . ไฟล์บันทึกนี้ช่วยให้คุณได้รับข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดในการติดตั้งไดรเวอร์ ในกรณีส่วนใหญ่ มี “แพ็คเกจไดรเวอร์ไม่ผ่านการตรวจสอบลายเซ็น " ข้อผิดพลาด. เป็นไปได้มากว่าใบรับรองของไดรเวอร์จะไม่ถูกเพิ่มไปยังที่เก็บใบรับรองที่เชื่อถือได้
หากการติดตั้งไดรเวอร์สำเร็จ setupapi.dev.log
ไฟล์ควรมีบรรทัดต่อไปนี้:
>>> [การติดตั้งอุปกรณ์ (DiInstallDriver) - C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr.inf]>>>> ส่วนเริ่มต้น 2018/07/22 23:32:57.015cmd:Pnputil -i -ac:\DriverCert\xg\xg20gr.infndv:แฟล็ก:0x00000000ndv:เส้นทาง INF:C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aaIn12b\xg20gr.infinf:{SetupCopy\System DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr.inf} 13:23:37.046inf: รูปแบบการคัดลอก:0x00000000inf: เส้นทางร้านค้าของไดรเวอร์:C:\WINDOWS\System32\DriverStore\55gRepository x.20 :C:\WINDOWS\INF\oem23.infinf:{SetupCopyOEMInf exit (0x00000000)} 13:23:37.077<<< ส่วนสิ้นสุด 2018/07/22 13:23:37.155 <<< [สถานะการออก:สำเร็จ]ก่อน>ไดรเวอร์โหมดผู้ใช้และโหมดเคอร์เนลใน Windows
ฉันขอเตือนคุณว่าใน Windows ไดรเวอร์สามารถดำเนินการได้ในโหมดเคอร์เนลหรือในโหมดผู้ใช้ โปรแกรมควบคุมโหมดเคอร์เนลที่เซ็นชื่อด้วยวิธีนี้จะไม่โหลดเมื่อ Windows บูทบนอุปกรณ์ UEFI ที่เปิดใช้งาน Secure Boot โดยมีข้อผิดพลาด:
รหัสเหตุการณ์:7000ERROR_DRIVER_BLOCKED1275 (0x4FB) ไดรเวอร์นี้ถูกบล็อกไม่ให้โหลด
คุณสามารถตรวจสอบว่าโหมด Secure Boot เปิดใช้งานอยู่หรือไม่โดยใช้คำสั่ง PowerShell:
Confirm-SecureBootUEFI
ไดรเวอร์โหมดเคอร์เนลทั้งหมดที่โหลดด้วยการเปิดใช้งาน SecureBoot จะต้องลงนามในระหว่างกระบวนการรับรองของ Microsoft (WHQL – Windows Hardware Quality Lab) เหตุผลก็คือเมื่อโหลดเคอร์เนล UEFI จะไม่สามารถตรวจสอบใบรับรองในที่เก็บใบรับรองเครื่อง Windows ได้
ข้อผิดพลาด SignTool:การเซ็นใบรับรองไม่เชื่อมโยงกับรูทการตรวจสอบรหัสของ MicrosoftMicrosoft กำหนดให้ต้องมีการรับรองไดรเวอร์ของบริษัทอื่นภายใต้โปรแกรมความเข้ากันได้ของฮาร์ดแวร์ของ Windows โดยเริ่มตั้งแต่ Windows 10 1607
ไดรเวอร์โหมดผู้ใช้ที่ลงชื่อด้วยตนเอง (โดยปกติคือเครื่องพิมพ์ สแกนเนอร์ พล็อตเตอร์ ฯลฯ) ทำงานได้แม้จะเปิดใช้งาน SecureBoot
สำหรับไดรเวอร์โหมดเคอร์เนล คุณจะต้องปิดการตรวจสอบลายเซ็นดิจิทัลและบูต Windows ในโหมดทดสอบ ด้วยคำสั่ง bcdedit.exe:bcdedit.exe /set /nointegritychecks on
bcdedit.exe /set testsigning ON