كيف أقوم بإنشاء شهادة موقعة ذاتيًا لتوقيع التعليمات البرمجية على نظام التشغيل Windows؟

StackOverflow https://stackoverflow.com/questions/84847

  •  01-07-2019
  •  | 
  •  

سؤال

كيف أقوم بإنشاء شهادة موقعة ذاتيًا لتوقيع التعليمات البرمجية باستخدام أدوات من Windows SDK؟

هل كانت مفيدة؟

المحلول

الإجابة المحدثة

إذا كنت تستخدم إصدارات Windows التالية أو الإصدارات الأحدث:Windows Server 2012 أو Windows Server 2012 R2 أو Windows 8.1 بعد ذلك تم الآن إهمال MakeCert, ، وتوصي Microsoft باستخدام أمر PowerShell شهادة موقعة ذاتيًا جديدة.

إذا كنت تستخدم إصدارًا أقدم مثل Windows 7، فستحتاج إلى الالتزام باستخدام MakeCert أو أي حل آخر.بعض الناس يقترح ال وحدة Powershell للبنية التحتية للمفتاح العام (PSPKI)..

الإجابة الأصلية

بينما يمكنك إنشاء شهادة توقيع التعليمات البرمجية موقعة ذاتيًا (SPC - شهادة ناشر البرمجيات) دفعة واحدة، أفضل القيام بما يلي:

إنشاء مرجع مصدق موقع ذاتيًا (CA)

makecert -r -pe -n "CN=My CA" -ss CA -sr CurrentUser ^
         -a sha256 -cy authority -sky signature -sv MyCA.pvk MyCA.cer

(^ = السماح لسطر أوامر الدفعة بالتفاف السطر)

يؤدي هذا إلى إنشاء شهادة موقعة ذاتيًا (-r)، مع مفتاح خاص قابل للتصدير (-pe).يُسمى "My CA"، ويجب وضعه في متجر CA للمستخدم الحالي.نحن نستخدم شا-256 خوارزمية.المفتاح مخصص للتوقيع (-sky).

يجب تخزين المفتاح الخاص في ملف MyCA.pvk، والشهادة في ملف MyCA.cer.

استيراد شهادة CA

نظرًا لأنه لا فائدة من الحصول على شهادة CA إذا كنت لا تثق بها، فستحتاج إلى استيرادها إلى مخزن شهادات Windows.أنت يستطيع استخدم الأداة الإضافية لشهادات MMC، ولكن من سطر الأوامر:

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

(تعرف على سبب أهمية الطوابع الزمنية)

إذا قمت باستيراد ملف PFX إلى مخزن الشهادات (يمكنك استخدام PVKIMPRT أو الأداة الإضافية MMC)، فيمكنك توقيع التعليمات البرمجية كما يلي:

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، سوف تحتاج إلى نسخة من Windows SDK و.NET Framework.الرابط الحالي متاح هنا: SDK و.NET (الذي يقوم بتثبيت makecert في C:\Program Files\Microsoft SDKs\Windows\v7.1).قد تختلف المسافة المقطوعة الخاصة بك.

يتوفر MakeCert من موجه أوامر Visual Studio.يتوفر Visual Studio 2015 عليه، ويمكن تشغيله من قائمة "ابدأ" في نظام التشغيل Windows 7 ضمن "موجه أوامر المطور لـ VS 2015" أو "موجه أوامر VS2015 x64 Native Tools" (ربما جميعهم في نفس المجلد).

نصائح أخرى

كانت إجابة روجر مفيدة للغاية.

ومع ذلك، واجهت مشكلة صغيرة في استخدامه، وظللت أتلقى مربع حوار الخطأ الأحمر "يتعذر على Windows التحقق من ناشر برنامج التشغيل هذا".كان المفتاح هو تثبيت شهادة جذر الاختبار باستخدام

certutil -addstore Root Demo_CA.cer

والتي لم تغطيها إجابة روجر تمامًا.

إليك ملف دفعي نجح معي (مع ملف .inf الخاص بي، غير مضمن).يوضح كيفية القيام بكل شيء من البداية إلى النهاية ، مع عدم وجود أدوات واجهة المستخدم الرسومية على الإطلاق (باستثناء بعض مطالبات كلمة المرور).

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

كما هو مذكور في الإجابة، من أجل استخدام طريقة غير مهملة لتوقيع البرنامج النصي الخاص بك، يجب على المرء أن يستخدم شهادة موقعة ذاتيًا جديدة.

  1. توليد المفتاح:
    New-SelfSignedCertificate -DnsName email@yourdomain.com -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My

  2. تصدير الشهادة بدون المفتاح الخاص:
    Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt سيعمل [0] على تنفيذ هذا الأمر في الحالات التي يكون لديك فيها أكثر من شهادة واحدة...من الواضح أن الفهرس يطابق الشهادة التي تريد استخدامها ...أو استخدم طريقة للترشيح (عن طريق بصمة الإبهام أو المُصدر).

  3. قم باستيراده كناشر موثوق به
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher

  4. قم باستيراده كمرجع مصدق جذر.
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root

  5. قم بالتوقيع على البرنامج النصي.
    Set-AuthenticodeSignature .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)

من الواضح أنه بمجرد قيامك بإعداد المفتاح، يمكنك ببساطة التوقيع على أي نصوص برمجية أخرى باستخدامه.
يمكنك الحصول على معلومات أكثر تفصيلاً وبعض المساعدة في استكشاف الأخطاء وإصلاحها هذا المقال.

اعتبارًا من PowerShell 4.0 (Windows 8.1/الخادم 2012 R2) من الممكن عمل شهادة في Windows بدونها makecert.exe.

الأوامر التي تحتاجها هي شهادة موقعة ذاتيًا جديدة و تصدير-PfxCertificate.

التعليمات موجودة إنشاء شهادات موقعة ذاتيًا باستخدام PowerShell.

إنه سهل إلى حد ما باستخدام شهادة موقعة ذاتيًا جديدة الأمر في بوويرشيل.افتح بوويرشيل وقم بتشغيل هذه الأوامر الثلاثة.

1) إنشاء شهادة:
$ cert = new -selfsignedCertificate -DnsName www.yourwebsite.com -type codesigning -CertStoreLocation cert: currentuser my

2) تعيين كلمة المرور لذلك:
$ certpassword = convertto -securestring -string "my_passowrd" -force –asplaintext

3) تصديرها:
Export -PfxCertificate -cert "cert: currentUser my $ ($ cert.thumbprint)" -filepath "d: selfsigncert.pfx" -password $ certpassword

شهادتك selfsigncert.pfx سوف يتم تحديد موقعه @ D:/


خطوة اختيارية: قد تحتاج أيضًا إلى إضافة كلمة مرور الشهادة إلى متغيرات بيئة النظام.قم بذلك عن طريق إدخال أدناه في cmd: setx CSC_KEY_PASSWORD "my_password"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top