मैं विंडोज पर कोड साइनिंग के लिए एक स्व-हस्ताक्षरित प्रमाण पत्र कैसे बना सकता हूं?


225

मैं विंडोज एसडीके से उपकरणों का उपयोग करके कोड पर हस्ताक्षर करने के लिए स्व-हस्ताक्षरित प्रमाण पत्र कैसे बना सकता हूं?


इस उत्तर की जाँच करें: stackoverflow.com/q/53771022/623913
कार्टुको

जवाबों:


363

अद्यतन उत्तर

यदि आप निम्न Windows संस्करण या बाद के संस्करणों का उपयोग कर रहे हैं: Windows Server 2012, Windows Server 2012 R2, या Windows 8.1 तब MakeCert अब पदावनत हो गया है , और Microsoft PowerShell Cmdlet New-SelfSignedCertificate का उपयोग करने की अनुशंसा करता है

यदि आप Windows 7 जैसे पुराने संस्करण का उपयोग कर रहे हैं, तो आपको MakeCert या किसी अन्य समाधान के साथ रहना होगा। कुछ लोगों का सुझाव है सार्वजनिक कुंजी बुनियादी सुविधा Powershell (PSPKI) मॉड्यूल

मूल उत्तर

जब आप एक स्व-हस्ताक्षरित कोड-हस्ताक्षरित प्रमाण पत्र (एसपीसी - सॉफ्टवेयर प्रकाशक प्रमाणपत्र ) एक बार में बना सकते हैं, तो मैं निम्नलिखित करना पसंद करता हूं:

स्व-हस्ताक्षरित प्रमाणपत्र प्राधिकरण (CA) बनाना

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 प्रमाणपत्र आयात करना

क्योंकि CA प्रमाणपत्र होने का कोई मतलब नहीं है अगर आपको इस पर भरोसा नहीं है, तो आपको इसे Windows प्रमाणपत्र स्टोर में आयात करना होगा। आप प्रमाण पत्र एमएमसी स्नैपइन का उपयोग कर सकते हैं, लेकिन कमांड लाइन से:

certutil -user -addstore Root MyCA.cer

कोड-हस्ताक्षर प्रमाणपत्र (SPC) बनाना

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

पूर्ण Microsoft प्रलेखन

डाउनलोड

जो .NET डेवलपर नहीं हैं, उनके लिए आपको विंडोज एसडीके और .NET फ्रेमवर्क की कॉपी की आवश्यकता होगी। एक वर्तमान लिंक यहां उपलब्ध है: एसडीके और .NET (जो मेक इनर्ट स्थापित करता है C:\Program Files\Microsoft SDKs\Windows\v7.1)। आपकी माइलेज भिन्न हो सकती है।

MakeCert विजुअल स्टूडियो कमांड प्रॉम्प्ट से उपलब्ध है। विजुअल स्टूडियो 2015 के पास यह है, और इसे विंडोज मेनू में स्टार्ट मेनू से "डेवलपर कमांड प्रॉम्प्ट फॉर वीएस 2015" या "VS2015 x64 नेटिव टूल कमांड प्रॉम्प्ट" के तहत लॉन्च किया जा सकता है (शायद सभी एक ही फ़ोल्डर में)।


क्या इस पद्धति का उपयोग करके प्रमाणपत्र के ईमेल पते क्षेत्र को पॉप्युलेट करने का कोई तरीका है? राइट क्लिक exe> गुण> डिजिटल हस्ताक्षर हस्ताक्षर के बाद "उपलब्ध नहीं" के रूप में ईमेल दिखाता है।
क्रोनोकली

यदि आपको "बहुत अधिक पैरामीटर" त्रुटियां मिलती हैं, तो आप जांचते हैं कि आपने गलती से हाइफ़न में से एक को संपादित नहीं किया था। असफल होना - हाइफ़न को फिर से लिखना - कॉपी पेस्ट न करें।
fiat

8
@ क्रोनोकली प्रमाणपत्र के ईमेल क्षेत्र को आबाद करने के लिए, बस जोड़ें E=your@email। जैसे:makecert -pe -n "CN=My SPC,E=email@domain" ........
रॉब डब्ल्यू

1
क्या आपको विस्तारित उपयोग कुंजी ध्वज की आवश्यकता नहीं है, -eku 1.3.6.1.5.5.7.3.3इसलिए कोड को हस्ताक्षर करने के लिए प्रमाणित किया जा सकता है (मुझे पता है कि शक्तियां स्क्रिप्ट्स को साइन करने में विफल रहती है अगर यह याद आ रही है)
स्कॉट चैंबरलेन 23

1
@AdamPhelps, विंडोज़ आपके प्रमाणपत्र पर भरोसा करने के लिए "सीख" नहीं पाएगा। आपके उपयोगकर्ताओं को रूट स्टोर में CA प्रमाणपत्र स्थापित करने की आवश्यकता है। यह आम तौर पर बोल रहा है, एक बुरा विचार (क्योंकि रूट सीए प्रमाणपत्र का उपयोग नापाक उद्देश्यों के लिए किया जा सकता है)। यह एक उद्यम परिदृश्य में समझ बना सकता है, यद्यपि।
रोजर लिप्सकॉम्ब

36

जैसा कि उत्तर में कहा गया है, अपनी स्वयं की स्क्रिप्ट पर हस्ताक्षर करने के लिए एक गैर पदावनत तरीके का उपयोग करने के लिए, किसी को New-SelfSignCertificate का उपयोग करना चाहिए ।

  1. कुंजी उत्पन्न करें:
New-SelfSignedCertificate -DnsName email@yourdomain.com -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My
  1. निजी कुंजी के बिना प्रमाणपत्र निर्यात करें:
Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt

[०] यह काम उन मामलों के लिए करेगा जब आपके पास एक से अधिक प्रमाण पत्र हैं ... स्पष्ट रूप से सूचकांक को उस प्रमाणपत्र से मिलाएं जिसे आप उपयोग करना चाहते हैं ... या फ़ाइल को छानने का एक तरीका उपयोग करें (थम्बप्रिंट या जारीकर्ता द्वारा)।

  1. इसे विश्वसनीय प्रकाशक के रूप में आयात करें
Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher
  1. इसे रूट प्रमाणपत्र प्राधिकारी के रूप में आयात करें।
Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root
  1. स्क्रिप्ट पर हस्ताक्षर करें (यह मानते हुए कि इसका नाम script.ps1 है, तदनुसार पथ को ठीक करें)।
Set-AuthenticodeSignature .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)

जाहिर है कि एक बार आपके पास कुंजी सेट करने के बाद, आप बस इसके साथ किसी अन्य स्क्रिप्ट पर हस्ताक्षर कर सकते हैं।
आप इस लेख में अधिक विस्तृत जानकारी और कुछ समस्या निवारण सहायता प्राप्त कर सकते हैं ।


इसके लिए धन्यवाद। मुझे पहले नीचे के उत्तरों से शुरू करना चाहिए था!
mdiehl13

धन्यवाद। यह काम करने के लिए इस 'प्रतीत होता है सरल' प्रक्रिया प्राप्त करने की कोशिश में मेरे सभी मुद्दों को हल किया।
डेव

1
मुझे "2." पर एक त्रुटि मिली (get-ChildItem ...)एक से अधिक प्रमाणपत्र लौटने के कारण , इसलिए मैंने अंत में "[0]" डाला और यह काम कर गया। जैसेExport-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt
लंडमैन

1
@ कम फीडबैक के लिए धन्यवाद, मैंने कम कैफीन
;;;

1
संकेत देने के लिए @ लारा धन्यवाद, मैंने संपादन करते समय करीब से ध्यान नहीं दिया था, ऐसा लगता है कि स्टैकऑवरफ्लो अब ब्लॉक के सिंटैक्स के बारे में अधिक उपयुक्त है और अब कोड की शुरुआत से पहले एक नई लाइन की आवश्यकता है।
चामी

21

रोजर का जवाब बहुत मददगार था।

मुझे इसका उपयोग करने में थोड़ी परेशानी हुई, हालाँकि, और लाल हो रहा था "विंडोज इस ड्राइवर सॉफ़्टवेयर के प्रकाशक को सत्यापित नहीं कर सकता" त्रुटि संवाद। कुंजी के साथ परीक्षण रूट प्रमाणपत्र स्थापित करना था

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

4
यदि आप ड्राइवरों के हस्ताक्षर के लिए इसका उपयोग करना चाहते हैं, तो आपको मशीन स्टोर में सीए प्रमाण पत्र आयात करना होगा। मेरा उदाहरण इसे उपयोगकर्ता स्टोर में आयात करता है, जो परीक्षण / आंतरिक उद्देश्यों के लिए, अधिकांश सॉफ़्टवेयर के लिए ठीक है।
रोजर लिप्सकॉम्ब

20

Powershell में New-SelfSignCertificate कमांड का उपयोग करना काफी आसान है । ओपन पॉवरशेल और इन 3 कमांड को रन करें।

1) प्रमाण पत्र बनाएँ :
$ सर्टिफिकेट = नया-स्वनिर्धारित सर्टिफिकेट -DnsName www.yourwebsite.com -Type कोड -Signing -CertStoreLocation प्रमाणपत्र: \ CurrentUser \ My

2) इसके लिए पासवर्ड सेट करें :
$ CertPassword = ConvertTo-SecureString -String "my_passowrd" -Force –AsPlainText

3) इसे निर्यात करें :
Export-PfxCertificate -Cert "सर्टिफिकेट: \ CurrentUser \ My \ $ ($ cert.Thumbprint)" -FilePath "d: \ selfsigncert.pfx" -Pwordword $ CertPassword

आपका प्रमाणपत्र selfsigncert.pfx @ स्थित होगाD:/


वैकल्पिक कदम: आपको सिस्टम पर्यावरण चर में प्रमाणपत्र पासवर्ड भी जोड़ना होगा। cmd में नीचे दर्ज करके ऐसा करें:setx CSC_KEY_PASSWORD "my_password"


जैरीगॉयल क्या आप जानते हैं कि स्वयं हस्ताक्षरित प्रमाणपत्र को सीए रूट ट्रस्टेड प्रमाणपत्र में कैसे बदला जाए?
श्री हीलिस

12

PowerShell 4.0 (Windows 8.1 / Server 2012 R2) के रूप में makecert.exe के बिना विंडोज में एक प्रमाण पत्र बनाना संभव है ।

आपको जिन आदेशों की आवश्यकता है, वे न्यू-सेल्फसाइनड सर्टिफिकेट और एक्सपोर्ट-PfxCert सर्टिफिकेट हैं

निर्देश PowerShell के साथ स्व-हस्ताक्षरित प्रमाण पत्र बनाने में हैं ।


3
यह ध्यान देने योग्य है कि, भले ही आप विंडोज 7 पर पावरशेल 4.0 प्राप्त करने के लिए डब्ल्यूएमएफ अपडेट स्थापित करते हैं, आपके पास इस कमांड तक पहुंच नहीं होगी। यह Win8 या सर्वर 2012 या उसके बाद का प्रतीत होता है।
डैनियल यांकोवस्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.