मैं विंडोज एसडीके से उपकरणों का उपयोग करके कोड पर हस्ताक्षर करने के लिए स्व-हस्ताक्षरित प्रमाण पत्र कैसे बना सकता हूं?
मैं विंडोज एसडीके से उपकरणों का उपयोग करके कोड पर हस्ताक्षर करने के लिए स्व-हस्ताक्षरित प्रमाण पत्र कैसे बना सकता हूं?
जवाबों:
यदि आप निम्न Windows संस्करण या बाद के संस्करणों का उपयोग कर रहे हैं: Windows Server 2012, Windows Server 2012 R2, या Windows 8.1 तब MakeCert अब पदावनत हो गया है , और Microsoft PowerShell Cmdlet New-SelfSignedCertificate का उपयोग करने की अनुशंसा करता है ।
यदि आप Windows 7 जैसे पुराने संस्करण का उपयोग कर रहे हैं, तो आपको MakeCert या किसी अन्य समाधान के साथ रहना होगा। कुछ लोगों का सुझाव है सार्वजनिक कुंजी बुनियादी सुविधा Powershell (PSPKI) मॉड्यूल ।
जब आप एक स्व-हस्ताक्षरित कोड-हस्ताक्षरित प्रमाण पत्र (एसपीसी - सॉफ्टवेयर प्रकाशक प्रमाणपत्र ) एक बार में बना सकते हैं, तो मैं निम्नलिखित करना पसंद करता हूं:
makecert -r -pe -n "CN=My CA" -ss CA -sr CurrentUser ^
-a sha256 -cy authority -sky signature -sv MyCA.pvk MyCA.cer
(^> बैच कमांड-लाइन को लाइन लपेटने की अनुमति दें)
यह एक निर्यात करने योग्य निजी कुंजी (-pe) के साथ एक स्व-हस्ताक्षरित (-r) प्रमाण पत्र बनाता है। इसे "माई सीए" नाम दिया गया है, और इसे वर्तमान उपयोगकर्ता के लिए सीए स्टोर में रखा जाना चाहिए। हम SHA-256 एल्गोरिथ्म का उपयोग कर रहे हैं । कुंजी हस्ताक्षर (-sky) के लिए है।
निजी कुंजी को MyCA.pvk फ़ाइल में संग्रहीत किया जाना चाहिए, और प्रमाणपत्र MyCA.cer फ़ाइल में होना चाहिए।
क्योंकि CA प्रमाणपत्र होने का कोई मतलब नहीं है अगर आपको इस पर भरोसा नहीं है, तो आपको इसे Windows प्रमाणपत्र स्टोर में आयात करना होगा। आप प्रमाण पत्र एमएमसी स्नैपइन का उपयोग कर सकते हैं, लेकिन कमांड लाइन से:
certutil -user -addstore Root MyCA.cer
makecert -pe -n "CN=My SPC" -a sha256 -cy end ^
-sky signature ^
-ic MyCA.cer -iv MyCA.pvk ^
-sv MySPC.pvk MySPC.cer
यह ऊपर के रूप में बहुत अधिक है, लेकिन हम एक जारीकर्ता कुंजी और प्रमाणपत्र (-ic और -iv स्विच) प्रदान कर रहे हैं।
हम प्रमाणपत्र और कुंजी को PFX फाइल में बदलना चाहते हैं:
pvk2pfx -pvk MySPC.pvk -spc MySPC.cer -pfx MySPC.pfx
यदि आप PFX फ़ाइल को सुरक्षित रखना चाहते हैं, तो -po स्विच जोड़ें, अन्यथा PVK2PFX कोई पासफ़्रेज़ नहीं के साथ PFX फ़ाइल बनाता है।
signtool sign /v /f MySPC.pfx ^
/t http://timestamp.url MyExecutable.exe
( देखें कि टाइमस्टैम्प क्यों हो सकता है )
यदि आप सर्टिफिकेट स्टोर में पीएफएक्स फ़ाइल आयात करते हैं (आप पीवीकेआईएमपीआरटी या एमएमसी स्नैपिन का उपयोग कर सकते हैं), तो आप कोड निम्नानुसार हस्ताक्षरित कर सकते हैं:
signtool sign /v /n "Me" /s SPC ^
/t http://timestamp.url MyExecutable.exe
कुछ संभावित टाइमस्टैम्प URL signtool /t
निम्न हैं:
http://timestamp.verisign.com/scripts/timstamp.dll
http://timestamp.globalsign.com/scripts/timstamp.dll
http://timestamp.comodoca.com/authenticode
जो .NET डेवलपर नहीं हैं, उनके लिए आपको विंडोज एसडीके और .NET फ्रेमवर्क की कॉपी की आवश्यकता होगी। एक वर्तमान लिंक यहां उपलब्ध है: एसडीके और .NET (जो मेक इनर्ट स्थापित करता है C:\Program Files\Microsoft SDKs\Windows\v7.1
)। आपकी माइलेज भिन्न हो सकती है।
MakeCert विजुअल स्टूडियो कमांड प्रॉम्प्ट से उपलब्ध है। विजुअल स्टूडियो 2015 के पास यह है, और इसे विंडोज मेनू में स्टार्ट मेनू से "डेवलपर कमांड प्रॉम्प्ट फॉर वीएस 2015" या "VS2015 x64 नेटिव टूल कमांड प्रॉम्प्ट" के तहत लॉन्च किया जा सकता है (शायद सभी एक ही फ़ोल्डर में)।
E=your@email
। जैसे:makecert -pe -n "CN=My SPC,E=email@domain" ........
-eku 1.3.6.1.5.5.7.3.3
इसलिए कोड को हस्ताक्षर करने के लिए प्रमाणित किया जा सकता है (मुझे पता है कि शक्तियां स्क्रिप्ट्स को साइन करने में विफल रहती है अगर यह याद आ रही है)
जैसा कि उत्तर में कहा गया है, अपनी स्वयं की स्क्रिप्ट पर हस्ताक्षर करने के लिए एक गैर पदावनत तरीके का उपयोग करने के लिए, किसी को New-SelfSignCertificate का उपयोग करना चाहिए ।
New-SelfSignedCertificate -DnsName email@yourdomain.com -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My
Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt
[०] यह काम उन मामलों के लिए करेगा जब आपके पास एक से अधिक प्रमाण पत्र हैं ... स्पष्ट रूप से सूचकांक को उस प्रमाणपत्र से मिलाएं जिसे आप उपयोग करना चाहते हैं ... या फ़ाइल को छानने का एक तरीका उपयोग करें (थम्बप्रिंट या जारीकर्ता द्वारा)।
Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher
Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root
Set-AuthenticodeSignature .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)
जाहिर है कि एक बार आपके पास कुंजी सेट करने के बाद, आप बस इसके साथ किसी अन्य स्क्रिप्ट पर हस्ताक्षर कर सकते हैं।
आप इस लेख में अधिक विस्तृत जानकारी और कुछ समस्या निवारण सहायता प्राप्त कर सकते हैं ।
(get-ChildItem ...)
एक से अधिक प्रमाणपत्र लौटने के कारण , इसलिए मैंने अंत में "[0]" डाला और यह काम कर गया। जैसेExport-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt
रोजर का जवाब बहुत मददगार था।
मुझे इसका उपयोग करने में थोड़ी परेशानी हुई, हालाँकि, और लाल हो रहा था "विंडोज इस ड्राइवर सॉफ़्टवेयर के प्रकाशक को सत्यापित नहीं कर सकता" त्रुटि संवाद। कुंजी के साथ परीक्षण रूट प्रमाणपत्र स्थापित करना था
certutil -addstore Root Demo_CA.cer
जो रोजर के जवाब में काफी कवर नहीं था।
यहाँ एक बैच फ़ाइल है जो मेरे लिए काम की है (मेरी .inf फ़ाइल के साथ, शामिल नहीं है)। यह दिखाता है कि यह सब शुरू से आखिर तक कैसे किया जाता है, जिसमें कोई GUI टूल बिल्कुल नहीं है (कुछ पासवर्ड संकेतों को छोड़कर)।
REM Demo of signing a printer driver with a self-signed test certificate.
REM Run as administrator (else devcon won't be able to try installing the driver)
REM Use a single 'x' as the password for all certificates for simplicity.
PATH %PATH%;"c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin";"c:\Program Files\Microsoft SDKs\Windows\v7.0\Bin";c:\WinDDK\7600.16385.1\bin\selfsign;c:\WinDDK\7600.16385.1\Tools\devcon\amd64
makecert -r -pe -n "CN=Demo_CA" -ss CA -sr CurrentUser ^
-a sha256 -cy authority -sky signature ^
-sv Demo_CA.pvk Demo_CA.cer
makecert -pe -n "CN=Demo_SPC" -a sha256 -cy end ^
-sky signature ^
-ic Demo_CA.cer -iv Demo_CA.pvk ^
-sv Demo_SPC.pvk Demo_SPC.cer
pvk2pfx -pvk Demo_SPC.pvk -spc Demo_SPC.cer ^
-pfx Demo_SPC.pfx ^
-po x
inf2cat /drv:driver /os:XP_X86,Vista_X64,Vista_X86,7_X64,7_X86 /v
signtool sign /d "description" /du "www.yoyodyne.com" ^
/f Demo_SPC.pfx ^
/p x ^
/v driver\demoprinter.cat
certutil -addstore Root Demo_CA.cer
rem Needs administrator. If this command works, the driver is properly signed.
devcon install driver\demoprinter.inf LPTENUM\Yoyodyne_IndustriesDemoPrinter_F84F
rem Now uninstall the test driver and certificate.
devcon remove driver\demoprinter.inf LPTENUM\Yoyodyne_IndustriesDemoPrinter_F84F
certutil -delstore Root Demo_CA
Powershell में New-SelfSignCertificate कमांड का उपयोग करना काफी आसान है । ओपन पॉवरशेल और इन 3 कमांड को रन करें।
1) प्रमाण पत्र बनाएँ :
$ सर्टिफिकेट = नया-स्वनिर्धारित सर्टिफिकेट -DnsName www.yourwebsite.com -Type कोड -Signing -CertStoreLocation प्रमाणपत्र: \ CurrentUser \ My2) इसके लिए पासवर्ड सेट करें :
$ CertPassword = ConvertTo-SecureString -String "my_passowrd" -Force –AsPlainText3) इसे निर्यात करें :
Export-PfxCertificate -Cert "सर्टिफिकेट: \ CurrentUser \ My \ $ ($ cert.Thumbprint)" -FilePath "d: \ selfsigncert.pfx" -Pwordword $ CertPassword
आपका प्रमाणपत्र selfsigncert.pfx @ स्थित होगाD:/
वैकल्पिक कदम: आपको सिस्टम पर्यावरण चर में प्रमाणपत्र पासवर्ड भी जोड़ना होगा। cmd में नीचे दर्ज करके ऐसा करें:setx CSC_KEY_PASSWORD "my_password"
PowerShell 4.0 (Windows 8.1 / Server 2012 R2) के रूप में makecert.exe के बिना विंडोज में एक प्रमाण पत्र बनाना संभव है ।
आपको जिन आदेशों की आवश्यकता है, वे न्यू-सेल्फसाइनड सर्टिफिकेट और एक्सपोर्ट-PfxCert सर्टिफिकेट हैं ।
निर्देश PowerShell के साथ स्व-हस्ताक्षरित प्रमाण पत्र बनाने में हैं ।