কম্পিউটার টিউটোরিয়াল

Windows-এ অনসাইনড ডিভাইস ড্রাইভার সাইন করার উপায়

ডিফল্টরূপে, সমস্ত 64-বিট Windows ভার্সন বৈধ ডিজিটাল সিগনেচার ছাড়া ডিভাইস ড্রাইভার ইনস্টলেশন বাধা দেয়। অনসাইনড ড্রাইভার অপারেটিং সিস্টেম দ্বারা ব্লক করা হয়। একটি ডিজিটাল সিগনেচার নিশ্চিত করে যে ড্রাইভার একটি বিশ্বস্ত ডেভেলপার বা ভেন্ডার দ্বারা রিলিজ করা হয়েছে এবং এর কোড মডিফাই করা হয়নি।

Windows-এ অনসাইনড ড্রাইভারের জন্য ড্রাইভার সিগনেচার ভেরিফিকেশন নিষ্ক্রিয় করার چندین উপায় রয়েছে (GPO ব্যবহার, টেস্ট বুট মোড, ইত্যাদি)। আজ আমরা দেখাব Windows x64-এ যেকোনো অনসাইনড ড্রাইভার কীভাবে সাইন করতে হয় (গাইডটি Windows 11, 10, 8.1, এবং 7-র জন্য প্রযোজ্য)।

বিষয়সূচি:

  • সেলফ-সাইনড ড্রাইভার সার্টিফিকেট তৈরি করা
  • ড্রাইভার প্যাকেজ সাইন করার জন্য ক্যাটালগ ফাইল (CAT) তৈরি করা
  • সেলফ-সাইনড সার্টিফিকেট দিয়ে ড্রাইভার প্যাকেজ সাইন করা
  • সেলফ-সাইনড ড্রাইভার Windows-এ ইনস্টল করা
  • Windows-এ ইউজার-মোড এবং কার্নেল-মোড ড্রাইভার

মান লেন, আপনার কাছে Windows 10 x64-র জন্য একটি নির্দিষ্ট অনসাইনড ডিভাইস ড্রাইভার (ডিজিটাল সিগনেচার ছাড়া) আছে। এই উদাহরণে, এটি একটি পুরনো গ্রাফিক্স কার্ডের ড্রাইভার। আপনার Windows ভার্সনের জন্য ড্রাইভার আর্কাইভ ভেন্ডারের ওয়েবসাইট থেকে ডাউনলোড করা হয়েছে (আমি Windows Vista x64-র জন্য ভিডিও ড্রাইভার ভার্সন খুঁজে পেয়েছিলাম) এবং এর কন্টেন্ট c:\tools\drv1\-এ এক্সট্র্যাক্ট করা হয়েছে। চলে বিল্ট-ইন pnputil টুল দিয়ে ড্রাইভারটি Windows ড্রাইভার স্টোরে যোগ করে ইনস্টল করার চেষ্টা করি:
Pnputil –a c:\tools\drv1\xg20gr.inf

নোট. এই কমান্ড এবং পরবর্তী সকল কমান্ড এডমিনিস্ট্রেটর হিসেবে কমান্ড প্রম্পটে চালাতে হবে।

ড্রাইভার ইনস্টলেশনের সময় Windows 7 একটি সতর্কতা দেখায় যে অপারেটিং সিস্টেম এই ড্রাইভারের ডিজিটাল সিগনেচার ভেরিফাই করতে পারছে না:

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

Windows 10 (21H2)-এ এই সতর্কতা দেখায় না, কিন্তু কনসোলে একটি এরর দেখায়:

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

File Explorer-এ থেকে ইনফ ড্রাইভার ফাইলে রাইট-ক্লিক করে ইনস্টল ট্যাপ করলে ত্রুটি দেখায়:

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

চলে এই ড্রাইভারকে একটি সেলফ-সাইনড সার্টিফিকেট দিয়ে সাইন করার চেষ্টা করি।

সিগনেচার তৈরি করতে এবং ড্রাইভার সাইন করতে, আপনাকে নিচের Windows অ্যাপ্লিকেশন ডেভেলপমেন্ট টুলগুলো ডাউনলোড ও ইনস্টল করতে হবে:

  • Windows SDK (Software Development Kit) বা Microsoft Visual Studio 2005+ আপনার Windows ভার্সনের জন্য। Windows SDK Signing tools for Desktop প্যাকেজ ইনস্টল করুন যেটিতে signtool.exe থাকে।
  • Windows Driver Kit (WDK) — https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk

টিপ. এই টুলগুলো ইনস্টল করার আগে নিশ্চিত হন যে আপনার কম্পিউটারে .NET Framework 4 ইনস্টল করা আছে।

সেলফ-সাইনড ড্রাইভার সার্টিফিকেট তৈরি করা

সিস্টেম ড্রাইভের রুটে C:\DriverCert ফোল্ডার তৈরি করুন।

New-SelfSignedCertificate PowerShell কমান্ডলেট ব্যবহার করে একটি কোড সাইনিং সার্টিফিকেট তৈরি করতে পারেন। এই উদাহরণে, আমরা ৩ বছরের বৈধতা অধিকার নিয়ে একটি সেলফ-সাইনড সার্টিফিকেট তৈরি করব।

$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 ডিফল্টরূপে এতে আস্থা রাখে না। Sigcheck ইউটিলিটি দিয়ে সার্টিফিকেট স্টোর চেক করলে, এই সার্টিফিকেটটি আনট্রাস্টেড হিসেবে দেখাবে, কারণ এটি Microsoft Trusted Root Certificates তালিকায় নেই (এই তালিকা περιοডিক্যালি আপডেট করতে হয়)।

এখন আপনাকে সার্টিফিকেটটি Trusted Root স্টোর এবং Trusted Publisher সার্টিফিকেটগুলোর মধ্যে যোগ করতে হবে:

$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

Windows-এর পুরনো ভার্সনে, Windows Software Development Kit (SDK)-র 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) একসাথে একই সার্টিফিকেট ফাইলে 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 -add C:\DriverCert\myDrivers.cer -s -r localMachine ROOT
certmgr.exe -add C:\DriverCert\myDrivers.cer -s -r localMachine TRUSTEDPUBLISHER

আপনি এই সার্টিফিকেটটি AD ডোমেইনে Group Policy ব্যবহার করে ক্লায়েন্ট কম্পিউটারগুলোর মধ্যে সেন্ট্রালি ডিপ্লয় করতে পারেন।

মেশিনের লোকাল সার্টিফিকেট ম্যানেজমেন্ট স্ন্যাপ-ইন (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"

INF ফাইলের ভিত্তিতে একটি CAT ফাইল (ড্রাইভার প্যাকেজের সকল ফাইলের তথ্য ধারণ করে) তৈরি করুন। inf2cat.exe টুল (Windows Driver Kit, WDK-র অংশ) আপনার প্ল্যাটফর্মের জন্য একটি CAT ফাইল তৈরি করতে দেয়:

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

প্রক্রিয়া সঠিক হয়েছে কিনা নিশ্চিত করতে, লক্ষ্য করুন যে টার্গেট ডিরেক্টরিতে ফাইল 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

এরর ফিক্স করতে, [Version] সেকশনে DriverVer = লাইনটি খুঁজে বের করুন এবং সেটি এইরকম রিপ্লেস করুন:

DriverVer=05/01/2009,9.9.9.9

আপনি যদি Missing AMD64 CatalogFile entry এরর পান (x64-এর জন্য) অথবা Missing 32-bit CatalogFile entry, তবে .inf ফাইলের [Version] সেকশনে CatalogFile=xg20gr.cat লাইনটি যোগ করুন।

সেলফ-সাইনড সার্টিফিকেট দিয়ে ড্রাইভার প্যাকেজ সাইন করা

নিচের ফোল্ডারে যান:

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

আপনার তৈরি করা সার্টিফিকেট দিয়ে ড্রাইভার প্যাকেজ (ফাইল সেট) সাইন করুন Verisignকে টাইমস্ট্যাম্প সার্ভিস হিসেবে ব্যবহার করে। নিচের কমান্ডটি একটি পাসওয়ার্ড-প্রোটেক্টেড .pfx ফাইলে সংরক্ষিত সার্টিফিকেট ব্যবহার করে CAT ফাইলকে ডিজিটাল সিগনেচার দিয়ে সাইন করবে:

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"

যদি কমান্ডটি SignTool Error: An unexpected internal error has occurred বা Error information: SignerTimeStamp() failed. (-2147012865/0x80072eff) এরর দেয়, তবে ভিন্ন টাইমস্ট্যাম্প সার্ভার 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

আপনি CAT ফাইলের প্রপার্টিজের Digital Signatures ট্যাবে সার্টিফিকেটের তথ্য দেখতে পারেন।

যদি সার্টিফিকেট ট্রাস্টেড না হয় (অথবা 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 ফাইলে ড্রাইভার ডিরেক্টরিতে থাকা সকল ফাইলের ডিজিটাল সিগনেচার (থাম্বপ্রিন্ট) থাকে (INF ফাইলে CopyFiles সেকশনে লিস্ট করা ফাইলগুলো)। যদি এই ফাইলগুলোর যেকোনো একটি পরিবর্তন হয়, তবে ফাইলগুলোর চেকসাম CAT ফাইলের ডেটার সাথে মেলবে না, এবং ফলে এখন ড্রাইভার ইনস্টলেশন ব্যর্থ হবে।

সেলফ-সাইনড ড্রাইভার Windows-এ ইনস্টল করা

আমরা যে ড্রাইভারটি সাইন করেছি সেটি আবার ইনস্টল করার চেষ্টা করুন কমান্ড ব্যবহার করে:

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

এখন আপনি ড্রাইভারের অনুপস্থিত ডিজিটাল সিগনেচার সংক্রান্ত সতর্কতা দেখবেন না।

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

Windows 10 এবং 11-এ নিচের সতর্কতা দেখায়:

Would you like to install this device software?

"ইনস্টল" ক্লিক করুন ড্রাইভার প্যাকেজ Windows-এ ইনস্টল করার জন্য।

যদি কোনো কারণে ড্রাইভার ইনস্টল না হয়, তবে বিস্তারিত ড্রাইভার ইনস্টলেশন লগ ফাইলে থাকে C:\Windows\inf\setupapi.dev.log। এই লগ ফাইল ড্রাইভার ইনস্টলেশন এরর সম্পর্কে আরও তথ্য পেতে সাহায্য করে। অধিকাংশ ক্ষেত্রে "Driver package failed signature validation" এরর থাকে। এর মানে হলো ড্রাইভারের সার্টিফিকেট ট্রাস্টেড সার্টিফিকেট স্টোরে যোগ করা হয়নি।

যদি ড্রাইভার ইনস্টলেশন সফল হয়, তবে 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]

Windows-এ ইউজার-মোড এবং কার্নেল-মোড ড্রাইভার

یাদ दिलাই দেই যে Windows-এ ড্রাইভার কার্নেল-মোডে অথবা ইউজার মোডে এক্সিকিউট হতে পারে। এইভাবে সাইন করা কার্নেল-মোড ড্রাইভার UEFI ডিভাইসে Secure Boot সক্রিয় থাকলে Windows বুট হলে লোড হবে না এবং এরর দেখাবে:

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

PowerShell কমান্ড ব্যবহার করে Secure Boot মোড সক্রিয় কিনা চেক করতে পারেন:
Confirm-SecureBootUEFI

SecureBoot সক্রিয় থাকলে yüklenen সমস্ত কার্নেল-মোড ড্রাইভার অবশ্যই Microsoft সার্টিফিকেশন প্রক্রিয়া (WHQL — Windows Hardware Quality Lab) দিয়ে সাইন করা থাকতে হবে। কারণ কার্নেল লোড হলে, UEFI Windows লোকাল মেশিন সার্টিফিকেট স্টোরের সার্টিফিকেট ভেরিফাই করতে পারে না।

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

Microsoft Windows 10 1607 থেকে Windows Hardware Compatibility Program-এর অধীনে থার্ড-পার্টি ড্রাইভার সার্টিফিকেশন বাধ্যতামূলক করেছে।

সেলফ-সাইনড ইউজার-মোড ড্রাইভার (সাধারণত প্রিন্টার, স্ক্যানার, প্লটার, ইত্যাদি) SecureBoot সক্রিয় থাকলেও কাজ করবে।
কার্নেল-মোড ড্রাইভারের জন্য, আপনাকে ডিজিটাল সিগনেচার ভেরিফিকেশন নিষ্ক্রিয় করতে হবে এবং bcdedit.exe কমান্ড দিয়ে Windows-কে টেস্ট মোডে বুট করতে হবে:
bcdedit.exe /set /nointegritychecks on
bcdedit.exe /set testsigning ON

  1. ধাপে ধাপে গাইড: উইন্ডোজ ১০-এ ড্রাইভার রোলব্যাক করুন

  2. Windows 10 জেনেরিক PNP মনিটর ড্রাইভার সমস্যা সমাধান: ধাপে ধাপে গাইড

  3. উইন্ডোজ ১₀-এ ব্লুটুথ সক্রিয় করুন: ধাপে ধাপে গাইড

  4. Windows 10-এ ড্রাইভার এরর কোড 32 ফিক্স: ৪টি প্রমাণিত সমাধান