डिफ़ॉल्ट रूप से, सभी 64-बिट विंडोज संस्करण उन डिवाइस ड्राइवरों की स्थापना को रोकते हैं जो एक वैध डिजिटल हस्ताक्षर के साथ हस्ताक्षरित नहीं हैं। अहस्ताक्षरित ड्राइवर ऑपरेटिंग सिस्टम द्वारा अवरुद्ध हैं। एक डिजिटल हस्ताक्षर यह सुनिश्चित करता है कि ड्राइवर को एक विश्वसनीय डेवलपर या विक्रेता द्वारा जारी किया गया है, और इसका कोड संशोधित नहीं किया गया है।
विंडोज़ में अहस्ताक्षरित ड्राइवरों के लिए ड्राइवर हस्ताक्षर सत्यापन को अक्षम करने के कई तरीके हैं (जीपीओ, एक परीक्षण बूट मोड, आदि का उपयोग करके)। आज हम बताएंगे कि कैसे Windows x64 के लिए किसी भी अहस्ताक्षरित ड्राइवर पर हस्ताक्षर करें (गाइड विंडोज 11, 10, 8.1 और 7 के लिए लागू है)।
सामग्री:
- स्व-हस्ताक्षरित ड्राइवर प्रमाणपत्र बनाएं
- चालक पैकेज पर हस्ताक्षर करने के लिए कैटलॉग फ़ाइल (CAT) बनाना
- स्व-हस्ताक्षरित प्रमाणपत्र के साथ ड्राइवर पैकेज पर हस्ताक्षर करना
- Windows पर एक स्व-हस्ताक्षरित ड्राइवर स्थापित करना
- विंडोज़ में उपयोगकर्ता-मोड और कर्नेल-मोड ड्राइवर
मान लीजिए कि आपके पास विंडोज 10 x64 के लिए एक निश्चित अहस्ताक्षरित डिवाइस ड्राइवर (डिजिटल हस्ताक्षर के बिना) है। इस उदाहरण में, यह काफी पुराने ग्राफिक्स कार्ड का ड्राइवर है। आपके विंडोज संस्करण के लिए ड्राइवरों के साथ संग्रह को विक्रेता की वेबसाइट से डाउनलोड किया गया है (मैं केवल विंडोज विस्टा x64 के लिए वीडियो ड्राइवर संस्करण ढूंढने में सक्षम था) और इसकी सामग्री को c:\tools\drv1\<पर निकाला गया है। /em> . आइए एक अंतर्निहित pnputil के साथ इसे Windows ड्राइवर स्टोर में जोड़कर ड्राइवर को स्थापित करने का प्रयास करें टूल:Pnputil –a c:\tools\drv1\xg20gr.inf
ड्राइवर स्थापना के दौरान, विंडोज 7 एक चेतावनी प्रदर्शित करता है कि ऑपरेटिंग सिस्टम इस ड्राइवर के डिजिटल हस्ताक्षर को सत्यापित नहीं कर सकता:
Windows इस ड्राइवर सॉफ़्टवेयर के प्रकाशक को सत्यापित नहीं कर सकता।
Windows 10 (21H2) में यह चेतावनी प्रकट नहीं होती है, लेकिन कंसोल में एक त्रुटि दिखाई देती है:
inf को संसाधित करना:xg20gr.infड्राइवर पैकेज जोड़ना विफल:तृतीय-पक्ष INF में डिजिटल हस्ताक्षर जानकारी नहीं है।
यदि आप inf ड्राइवर फ़ाइल पर राइट-क्लिक करें और इंस्टॉल करें . चुनें फ़ाइल एक्सप्लोरर से ड्राइवर स्थापित करते समय, आपको एक त्रुटि प्राप्त होती है:
तृतीय-पक्ष INF में डिजिटल हस्ताक्षर जानकारी शामिल नहीं है।
आइए इस ड्राइवर को स्व-हस्ताक्षरित प्रमाणपत्र के साथ साइन करने का प्रयास करें।
एक हस्ताक्षर उत्पन्न करने और ड्राइवर पर हस्ताक्षर करने के लिए, आपको निम्नलिखित विंडोज एप्लिकेशन डेवलपमेंट टूल्स को डाउनलोड और इंस्टॉल करना होगा:
- विंडोज एसडीके (सॉफ़्टवेयर डेवलपमेंट किट) या आपके Windows संस्करण के लिए Microsoft Visual Studio 2005+। डेस्कटॉप के लिए Windows SDK साइनिंग टूल इंस्टॉल करें पैकेज जिसमें
signtool.exe
शामिल है; - Windows ड्राइवर किट (WDK) — https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
स्व-हस्ताक्षरित ड्राइवर प्रमाणपत्र बनाएं
सिस्टम ड्राइव के रूट पर C:\DriverCert फ़ोल्डर बनाएँ।
कोड हस्ताक्षर प्रमाणपत्र बनाने के लिए आप New-SelfSifgnedCertificate PowerShell cmdlet का उपयोग कर सकते हैं। इस उदाहरण में, हम 3 साल की वैधता अवधि के साथ एक स्व-हस्ताक्षरित प्रमाणपत्र बनाएंगे।
$todaydate =Get-Date
$add3year =$todaydate.AddYears(3)
$cert =New-SelfSignedCertificate -Subject "WOSHUB" - Type CodeSigningCert -CertStoreLocation cert:\LocalMachine\My - बाद में $add3year
फिर आपको इस प्रमाणपत्र को पासवर्ड के साथ एक pfx फ़ाइल में निर्यात करने की आवश्यकता है:
$CertPassword =ConvertTo-SecureString -String "P@ss0wrd" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath C:\DriverCert\myDrivers.pfx -Password $CertPassword
चूंकि हमारे द्वारा बनाया गया प्रमाणपत्र स्व-हस्ताक्षरित है, इसलिए विंडोज डिफ़ॉल्ट रूप से इस पर भरोसा नहीं करता है। जब आप सिगचेक उपयोगिता के साथ प्रमाणपत्र संग्रह की जांच करते हैं, तो यह प्रमाणपत्र अविश्वसनीय के रूप में प्रदर्शित होगा, क्योंकि यह Microsoft विश्वसनीय रूट प्रमाणपत्रों की सूची में सूचीबद्ध नहीं है (इस सूची को समय-समय पर अद्यतन करने की आवश्यकता है)।
अब आपको प्रमाण पत्र को विश्वसनीय रूट स्टोर और विश्वसनीय प्रकाशक प्रमाणपत्रों में जोड़ना होगा:
$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
विंडोज के पिछले संस्करणों में, आपको makecert.exe
. का उपयोग करना चाहिए स्व-हस्ताक्षरित प्रमाणपत्र उत्पन्न करने के लिए विंडोज सॉफ्टवेयर डेवलपमेंट किट (एसडीके) से उपकरण। इस मामले में, प्रमाणपत्र बनाने के आदेश इस तरह दिखाई देंगे:
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) को व्यक्तिगत सूचना विनिमय (.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 -add C:\DriverCert\myDrivers.cer -s -r localMachine TRUSTEDPUBLISHER
आप इस प्रमाणपत्र को किसी AD डोमेन में समूह नीति का उपयोग करके क्लाइंट कंप्यूटरों पर केंद्रीय रूप से परिनियोजित कर सकते हैं।
मशीन का स्थानीय प्रमाणपत्र प्रबंधन स्नैप-इन खोलें (certlm.msc
) और सत्यापित करें कि आपका प्रमाणपत्र विश्वसनीय प्रकाशकों और विश्वसनीय रूट प्रमाणन प्राधिकरणों में है।
नोट . भले ही प्रमाणपत्र की वैधता अवधि सीमित हो, कोड साइनिंग प्रमाणपत्र की समाप्ति का मतलब है कि आप नए हस्ताक्षर नहीं बना सकते। इस प्रमाणपत्र द्वारा पहले से हस्ताक्षरित ड्राइवर की वैधता असीमित है (या पुराने हस्ताक्षर निर्दिष्ट टाइमस्टैम्प के दौरान मान्य हैं)।
ड्राइवर पैकेज पर हस्ताक्षर करने के लिए कैटलॉग फ़ाइल (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"
INF फ़ाइल के आधार पर एक CAT फ़ाइल (ड्राइवर पैकेज में सभी फ़ाइलों के बारे में जानकारी शामिल है) उत्पन्न करें। inf2cat.exe टूल (Windows ड्राइवर किट, WDK से) आपको अपने प्लेटफ़ॉर्म के लिए CAT फ़ाइल जेनरेट करने देता है:
inf2cat.exe /driver:"C:\DriverCert\xg20" /os:7_X64 /verbose
यह सुनिश्चित करने के लिए कि प्रक्रिया सही थी, जाँच करें कि फ़ाइल C:\DriverCert\xg\xg20gr.cat लक्ष्य निर्देशिका में दिखाई दिया है, और लॉग में संदेश हैं:
साइनेबिलिटी टेस्ट पूरा हुआ।
और
कैटलॉग जनरेशन पूर्ण।नोट . मेरे मामले में कमांड Inf2Cat.exe ने एक त्रुटि दी:
साइनेबिलिटी टेस्ट फेल हो गया।त्रुटियां:22.9.7:DriverVer \hdx861a.infमें गलत तारीख पर सेट (नवीनतम ओएस के लिए 4/21/2009 को पोस्ट किया जाना चाहिए)
त्रुटि को ठीक करने के लिए, [Version]
. में DriverVer =के साथ लाइन ढूंढें अनुभाग और इसे इसके साथ बदलें:
DriverVer=05/01/2009,9.9.9.9
अगर आपको कोई त्रुटि मिलती है गुम AMD64 CatalogFile प्रविष्टि
(x64 के लिए) या 32-बिट कैटलॉग फ़ाइल प्रविष्टि अनुपलब्ध
, फिर लाइन CatalogFile=xg20gr.cat को .inf फ़ाइल के [संस्करण] अनुभाग में जोड़ें।
स्व-हस्ताक्षरित प्रमाणपत्र के साथ ड्राइवर पैकेज पर हस्ताक्षर करना
निम्न फ़ोल्डर में जाएँ:
cd "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64"
टाइमस्टैम्प सेवा के रूप में Verisign का उपयोग करके आपके द्वारा पहले बनाए गए प्रमाणपत्र के साथ ड्राइवर पैकेज (फ़ाइलों का सेट) पर हस्ताक्षर करें। पासवर्ड-संरक्षित .pfx फ़ाइल में संग्रहीत प्रमाणपत्र का उपयोग करके निम्न आदेश डिजिटल हस्ताक्षर के साथ सीएटी फ़ाइल पर हस्ताक्षर करेगा:
साइनटूल साइन /f C:\DriverCert\myDrivers.pfx /p P@ss0wrd /t https://timestamp.verisign.com/scripts/timstamp.dll /v C:\DriverCert\xg20\xg20gr.cat
विंडोज 10 और विंडोज 11 के आधुनिक संस्करणों पर, इस कमांड को चलाने से एक त्रुटि होगी:
SignTool त्रुटि:कोई फ़ाइल डाइजेस्ट एल्गोरिथम निर्दिष्ट नहीं है। कृपया डाइजेस्ट एल्गोरिथम को /fd ध्वज के साथ निर्दिष्ट करें। /fd SHA256 का उपयोग करने की अनुशंसा की जाती है और SHA1 की तुलना में अधिक सुरक्षित है। /fd sha1 के साथ साइनटूल को कॉल करना पिछले व्यवहार के बराबर है। हस्ताक्षर प्रमाणपत्र के हस्ताक्षर में प्रयुक्त हैश एल्गोरिथम का चयन करने के लिए, /fd certHash विकल्प का उपयोग करें।
आपको किसी अन्य कमांड का उपयोग करने की आवश्यकता है:
साइनटूल साइन /tr https://timestamp.digicert.com /td SHA256 /v /f C:\DriverCert\myDrivers.pfx /p P@ss0wrd "C:\DriverCert\xg\xg20gr.cat"
कोड>
यदि आदेश एक त्रुटि देता है
SignTool त्रुटि:एक अनपेक्षित आंतरिक त्रुटि हुई है
, या त्रुटि जानकारी:SignerTimeStamp() विफल। (-2147012865/0x80072eff)
, कोई भिन्न टाइमस्टैम्प सर्वर URL आज़माएं। किसी भी सूची को आजमाएं: <पूर्व>https://timestamp.comodoca.com/authenticodehttps://timestamp.globalsign.com/scripts/timstamp.dllhttps://timestamp.verisign.com/scripts/timstamp.dllhttps://tsa.starfieldtech.comhttp ://www.startssl.com/timestamp
यदि CAT फ़ाइल सफलतापूर्वक हस्ताक्षरित हो जाती है, तो निम्न संदेश प्रकट होना चाहिए:
सफलतापूर्वक हस्ताक्षरित:C:\DriverCert\xg\xg20gr.catसफलतापूर्वक हस्ताक्षरित फाइलों की संख्या:1
ड्राइवर का डिजिटल हस्ताक्षर .inf फ़ाइल में संदर्भित .cat फ़ाइल में निहित है। आप निम्न कमांड का उपयोग करके कैट फ़ाइल में ड्राइवर के डिजिटल हस्ताक्षर की जांच कर सकते हैं:
साइनटूल सत्यापित /v /pa c:\DriverCert\xg\xg20gr.cat
आप कैट फ़ाइल के गुणों में प्रमाणपत्र के बारे में जानकारी डिजिटल हस्ताक्षर पर भी देख सकते हैं टैब।
यदि प्रमाणपत्र विश्वसनीय नहीं है (या विश्वसनीय रूट प्रमाणपत्र स्टोर में नहीं जोड़ा गया है), तो SignTool Verify
चलाते समय एक त्रुटि दिखाई देगी आदेश:
SignTool त्रुटि:एक प्रमाणपत्र श्रृंखला संसाधित, लेकिन एक रूट प्रमाणपत्र में समाप्त हो जाती है जिस पर ट्रस्ट प्रदाता द्वारा भरोसा नहीं किया जाता है।CAT फ़ाइल में उन सभी फ़ाइलों के डिजिटल हस्ताक्षर (अंगूठे के निशान) होते हैं जो ड्राइवर निर्देशिका में हैं (फाइलें CopyFiles में INF फ़ाइल में सूचीबद्ध हैं) अनुभाग)। यदि इनमें से किसी भी फाइल को बदल दिया गया है, तो फाइलों का चेकसम सीएटी फाइल में डेटा से मेल नहीं खाएगा, और परिणामस्वरूप, ऐसे ड्राइवर की स्थापना विफल हो जाएगी।
Windows पर एक स्व-हस्ताक्षरित ड्राइवर स्थापित करना
उस ड्राइवर को स्थापित करने का प्रयास करें जिसे हमने कमांड का उपयोग करके फिर से साइन किया है:
Pnputil –i –a C:\DriverCert\xg20\xg20gr.inf
अब आपको ड्राइवर के गुम डिजिटल हस्ताक्षर के बारे में चेतावनी दिखाई नहीं देगी।
सिस्टम पर डिवाइस पर ड्राइवर को सफलतापूर्वक स्थापित किया।
ड्राइवर पैकेज सफलतापूर्वक जोड़ा गया।
Windows 10 और 11 में निम्न चेतावनी दिखाई देती है:
क्या आप इस उपकरण सॉफ़्टवेयर को स्थापित करना चाहेंगे?
"इंस्टॉल करें" . क्लिक करें विंडोज़ पर ड्राइवर पैकेज स्थापित करने के लिए।
यदि किसी कारण से ड्राइवर स्थापित नहीं है, तो एक विस्तृत ड्राइवर स्थापना लॉग फ़ाइल में निहित है 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_c5955181214aa12b\xg20gr.infinf:{SetupCopyOWS\System32\infinf:{SetupCopyOWS\System32\ DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr.inf} 13:23:37.046inf: कॉपी स्टाइल:0x00000000inf: ड्राइवर स्टोर पथ:C:\WINDOWS\System32\DriverStore\59g20gr. :C:\WINDOWS\INF\oem23.infinf:{SetupCopyOEMInf exit (0x00000000)} 13:23:37.077<<< सेक्शन एंड 2018/07/22 13:23:37.155<<< [निकास स्थिति:SUCCESS]पूर्व>Windows में उपयोगकर्ता-मोड और कर्नेल-मोड ड्राइवर
मैं आपको याद दिला दूं कि विंडोज़ में ड्राइवर को कर्नेल-मोड या उपयोगकर्ता मोड में निष्पादित किया जा सकता है। इस तरह से साइन किए गए कर्नेल-मोड ड्राइवर लोड नहीं होंगे जब विंडोज यूईएफआई डिवाइस पर सिक्योर बूट के साथ बूट होता है जो त्रुटि के साथ सक्षम होता है:
इवेंट आईडी:7000ERROR_DRIVER_BLOCKED1275 (0x4FB)इस ड्राइवर को लोड होने से ब्लॉक कर दिया गया है।
आप PowerShell कमांड का उपयोग करके जांच सकते हैं कि सुरक्षित बूट मोड सक्षम है या नहीं:
Confirm-SecureBootUEFI
SecureBoot सक्षम के साथ लोड किए गए सभी कर्नेल-मोड ड्राइवरों को Microsoft प्रमाणन प्रक्रिया (WHQL - Windows हार्डवेयर गुणवत्ता लैब) के दौरान हस्ताक्षरित होना चाहिए। कारण यह है कि जब कर्नेल लोड होता है, तो UEFI Windows स्थानीय मशीन प्रमाणपत्र स्टोर में प्रमाणपत्रों को सत्यापित नहीं कर सकता है।
SignTool त्रुटि:साइनिंग सर्टिफिकेट Microsoft कोड सत्यापन रूट से श्रृंखलाबद्ध नहीं होता है।Microsoft को Windows 10 1607 से शुरू होने वाले Windows हार्डवेयर संगतता कार्यक्रम के तहत अनिवार्य तृतीय-पक्ष ड्राइवर प्रमाणन की आवश्यकता है।
स्व-हस्ताक्षरित उपयोगकर्ता-मोड ड्राइवर (आमतौर पर प्रिंटर, स्कैनर, प्लॉटर, आदि) सिक्योरबूट सक्षम होने पर भी काम करेंगे।
कर्नेल-मोड ड्राइवरों के लिए, आपको डिजिटल हस्ताक्षर सत्यापन को अक्षम करना होगा और परीक्षण मोड में विंडोज को बूट करना होगा। bcdedit.exe कमांड के साथ:bcdedit.exe /set /nointegritychecks on
bcdedit.exe /set testsigning ON