۱۵ مرداد ۱۴۰۴

Techboy

اخبار و اطلاعات روز تکنولوژی

چگونه می توان باینری ها را در ویندوز امضا کرد

این که آیا شما گواهی امضای کد خود را ایجاد می کنید ، یا از گواهینامه گواهینامه استفاده می کنید ، به راحتی می توانید باینری های ویندوز خود را مهر تأیید کنید.

این که آیا شما گواهی امضای کد خود را ایجاد می کنید ، یا از گواهینامه گواهینامه استفاده می کنید ، به راحتی می توانید باینری های ویندوز خود را مهر تأیید کنید.

اگر برنامه هایی را در ویندوز مایکروسافت به یک باینری کامپایل کنید ، ممکن است متوجه شده باشید که باینری های حاصل همیشه روی ماشین های دیگر اجرا نمی شوند – حداقل ، بدون اینکه ویندوز اعتراض کند. به عنوان یک اقدام امنیتی ، ویندوز می تواند پیکربندی شود تا فقط باینری هایی را اجرا کند که توسط یک مقام قابل اعتماد به صورت دیجیتالی امضا شده اند.

امضای باینری ها در ویندوز به یک گواهی دیجیتال نیاز دارد. اگر باینری ایجاد می کنید می خواهید به طور کلی به جهان توزیع کنید ، می خواهید یک گواهی امضای کد را از یک مرجع صدور گواهینامه بدست آورید. با این حال ، اگر فقط برای اطمینان از رفتارهای باینری امضا شده همانطور که انتظار می رود ، باید کد را برای آزمایش داخلی خود امضا کنید.

خرید گواهی امضای کد

خرید گواهی از یک مجوز (CA) ساده ترین و جامع ترین گزینه برای امضای کد است. ارائه دهندگان معتبر معتبر ، مانند Verisign ، Thawte و Comodo ، همه گواهی های فروش برای امضای کد را می فروشند.

نکته منفی این است که گواهینامه های امضای کد تجاری ارزان نیستند. ساده ترین گواهینامه های امضای کد از حدود ۱۲۹ دلار در سال شروع می شود و می تواند از ۶۰۰ دلار در سال فراتر رود. هزینه هر سال نشان دهنده این واقعیت است که یک گواهی منقضی می شود ، به این معنی که می توان از آن برای امضای کد فقط برای مدت زمان از پیش تعریف شده ، به طور معمول یک سال استفاده کرد. اگرچه هر کدی که با گواهی امضا شده برای همیشه معتبر باقی می ماند ، پس از انقضای آن نمی توانید کد جدید را با گواهی امضا کنید.

چرا اینقدر گران است؟ برای یک ، مقیاس کشویی اعتماد برای گواهینامه ها وجود دارد. یک گواهی امضای کد ساده فقط طیف وسیعی از ضمانت نامه ها را در مورد باینری امضا شده ارائه می دهد. گرانتر “اعتبار سنجی گسترده” (EV) گواهینامه امضای کد ضمانت های قوی تری در برابر دستکاری ارائه می دهد. به عنوان مثال ، این گواهی ممکن است بر روی یک نشان سخت افزار سازگار با FIPS توزیع شود تا سرقت آن دشوار شود.

گواهینامه های

EV همچنین به باینری های امضا شده توسط سرویس اعتبار SmartScreen Microsoft Windows اعتماد می شود ، به طوری که بارگیری از باینری های امضا شده توسط Microsoft Edge یا ویندوز مسدود نمی شود. اگر قصد دارید درایورهای دستگاه را برای Microsoft Windows توسعه دهید ، شما باید از گواهی امضای کد EV استفاده کنید.

اگر فقط به خاطر آزمایش محلی خود به یک گواهی امضای کد نیاز دارید ، می توانید گواهی “خود امضا شده” خود را تولید کنید.

گواهینامه های خود امضا شده دقیقاً همان چیزی هستند که به نظر می رسند. آنها به تنهایی توسط شما امضا شده اند ، بنابراین بخشی از “زنجیره اعتماد” نیستند که مقامات گواهینامه در آن شرکت می کنند. در نتیجه ، هر چیزی که با یک گواهی خود امضا شده امضا کنید ، در طبیعت قابل اعتماد نخواهد بود. فقط در محیطی که گواهی را تشخیص می دهید ، اعتماد خواهد شد. اما اگر تمام آنچه شما نیاز دارید این است که کد را برای آزمایش خود امضا کنید ، به عنوان مقدمه ای برای امضای کد با یک گواهینامه CA ، می توانید یک گواهینامه خود را تولید کرده و از آن به عنوان یک اقدام موقت استفاده کنید.

تولید یک گواهینامه خود امضا شده در سیستم های مدرن ویندوز یک فرآیند چند مرحله ای است ، اما ویندوز سرور ۲۰۲۵ و ویندوز ۱۱ PowerShell با یک دستور داخلی همراه هستند ، new-selfsignedcertificate ، این باعث می شود که این روند به صورت خودکار امکان پذیر باشد.

کد دیجیتالی امضای کد در ویندوز ، گام به گام

بیایید مراحل را طی کنیم. اگر از یک گواهی خود امضا شده برای امضای باینری ویندوز خود استفاده می کنید ، تمام مراحل ذکر شده در زیر را طی خواهید کرد. اگر از گواهی CA استفاده می کنید ، فقط باید مراحل ۱ و ۶ را دنبال کنید.

مرحله ۱: اطمینان حاصل کنید که پیش نیازهای استودیو ویژوال را دارید

امضای کد با گواهی در ویندوز ، صرف نظر از نحوه دریافت گواهینامه ، به ابزاری نیاز دارد که به طور معمول با استودیو تصویری مایکروسافت حمل می شود ، به نام winget install -e --id Microsoft.VisualStudio.2022.BuildTools --force --override "--passive --wait --add Microsoft.VisualStudio.Workload.VCTools;includeRecommended"

پس از تنظیم ویژوال استودیو ، می خواهید تمام دستورات شرح داده شده در اینجا را از محیط خط فرمان سریع توسعه دهنده اجرا کنید. اگر برنامه ترمینال را راه اندازی کنید ، به عنوان یکی از گزینه های آن ، توسعه دهنده PowerShell را دریافت خواهید کرد. بر روی آن کلیک راست کرده و "Run as Administrator" را انتخاب کنید تا یک جلسه مرتفع PowerShell را آغاز کنید. حتماً از آن جلسه پوسته برای تمام دستورات نشان داده شده در اینجا استفاده کنید. .

اگر با یک گواهی از پیش تولید شده از یک مقام صدور گواهینامه کار می کنید ، می توانید به مرحله ۶ بروید. در غیر این صورت ، اگر با یک گواهی خود امضا شده کار می کنید ، ادامه دهید.

مرحله ۲: یک مقام ریشه جعلی برای دستگاه خود ایجاد کنید

اولین قدم ایجاد گواهی "Root Authority" خود امضا شده است. این یکی از مقامات اصلی صدور گواهینامه را شبیه سازی می کند ، اما فقط در دستگاه محلی ما.

ابتدا مدیر گواهینامه را در کنسول مدیریت مایکروسافت (MMC) برای کاربر فعلی باز کنید. می توانید با تایپ "گواهینامه های کاربر" در منوی Start به سرعت به آنجا بروید. این باید یک نماد با عنوان "مدیریت گواهینامه های کاربر" را ایجاد کند. روی آن کلیک کنید و MMC را با گواهینامه های کاربر فعلی باز می کنید.

روی شخصی در صفحه سمت چپ و سپس گواهینامه ها کلیک کنید. این لیستی از تمام گواهینامه های شخصی موجود برای کاربر فعلی را به شما می دهد.

Certificate Manager snap-in

Snap-In Certificate Manager برای ویندوز. گواهینامه های خود امضا شده در اینجا به طور پیش فرض با مراحل ذکر شده در این مقاله تولید می شوند.

idg

بعد ، سریع PowerShell را باز کنید (همانطور که در بالا ذکر شد) و دستور زیر را صادر کنید.


$rootCert = New-SelfSignedCertificate -CertStoreLocation Cert:\CurrentUser\My -DnsName "FakeCA" -Type CodeSigning

مهم: جلسه PowerShell را که استفاده می کنید را ببندید! پس از اجرای دستور فوق ، مرجع گواهینامه در متغیر پوسته rootCert ذخیره می شود.

اگر در پنجره Certificate Manager به "عمل | تازه کردن" ضربه بزنید ، باید یک گواهی جدید به نام Fakeca را در صفحه سمت راست مشاهده کنید.

مدیر گواهینامه SNAPIE-IN با New Nefered Root Root Authority

مرجع گواهی جعلی تازه تولید شده اکنون در فروشگاه گواهینامه کاربر موجود است. هر چیزی که با این گواهینامه امضا شده باشد فقط در صورتی که به همان دستگاه اعتماد کنیم معتبر است.

idg

این گواهی تازه تولید شده شما است.

مرحله ۳: صادر کردن گواهینامه ریشه ریشه

در مرحله بعد ، ما باید گواهی را به یک پرونده .pfx صادر کنیم تا بتوانیم دوباره از آن استفاده کنیم. برای انجام این کار ، ما باید برای محافظت از آن در برابر دستکاری ، رمز عبور را محافظت کنیم-حتی اگر این یک گواهی آزمون باشد.

دو روش برای انجام این کار وجود دارد: از طریق رابط MMC یا از طریق خط فرمان. رابط MMC آسان تر است. شما روی گواهی جدید کلیک راست می کنید ، "همه کارها | صادرات" را انتخاب کنید و از طریق کلید خصوصی از جمله کلید خصوصی پیروی کنید. با این حال ، دستورات PowerShell انعطاف پذیرتر هستند ، بنابراین ما آنها را در اینجا جزئیات خواهیم داد.

ما در همان جلسه از دستورات PowerShell زیر استفاده می کنیم.


[String]$rootCertPath = Join-Path -Path 'cert:\CurrentUser\My\' -ChildPath "$($rootCert.Thumbprint)"

این مسیر به گواهینامه موجود در فروشگاه ، با استفاده از متغیر $ rootCert که قبلاً ذخیره کرده ایم ، می رسد. (به همین دلیل می خواهید همه این دستورات را در همان جلسه پوسته صادر کنید ، بنابراین می توانید منابع مجدداً مورد استفاده قرار بگیرید.)

در مرحله بعد ، ما از این گواهینامه برای تولید دو پرونده به نام fakeca.pfx و fakeca.crt در فهرست کار فعلی خود استفاده خواهیم کرد. fakeca.pfx کلید خصوصی است که با گواهی همراه است ، بدون آن نمی توانیم از آن استفاده کنیم و باید از رمز عبور محافظت شود. fakeca.crt خود گواهی است که برای یک پرونده نوشته شده است.


Export-PfxCertificate -Cert $rootCertPath -FilePath 'FakeCA.pfx' -Password ("password" | ConvertTo-SecureString -AsPlainText -Force)
Export-Certificate -Cert $rootCertPath -FilePath 'FakeCA.crt'

در کد فوق ، در رمز عبور خود را جایگزین کنید که در آن می گوید "رمز عبور" . حتماً نقل قول ها را حفظ کنید.

مرحله ۴: ایجاد یک گواهی جدید امضا شده توسط سازمان ریشه جعلی

این مرحله بعدی یک گواهی واقعی را که توسط اقتدار ریشه جعلی که برای این دستگاه ایجاد کرده ایم ، امضا می کند. باز هم ، از همان جلسه PowerShell برای این دستورات نیز استفاده کنید.


$testCert = New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName "SignedByFakeCA" -KeyExportPolicy Exportable -KeyLength 2048 -KeyUsage DigitalSignature,KeyEncipherment -Signer $rootCert

مانند مرجع ریشه جعلی ، این گواهینامه در فروشگاه گواهی محلی دستگاه نگهداری می شود.

ما همچنین باید مانند گذشته ، گواهی و کلید خصوصی آن را به دو پرونده صادر کنیم. مطمئن باشید که از همان رمز عبور برای کلید خصوصی که در بالا تعریف کرده اید استفاده می کنید.


[String]$testCertPath = Join-Path -Path 'cert:\LocalMachine\My\' -ChildPath "$($testCert.Thumbprint)"
Export-PfxCertificate -Cert $testCertPath -FilePath testcert.pfx -Password ("password" | ConvertTo-SecureString -AsPlainText -Force)
Export-Certificate -Cert $testCertPath -FilePath testcert.crt

یک بار دیگر ، هنگامی که شما تمام شد ، باید دو پرونده به نام testcert.pfx و testcert.crt در فهرست کار فعلی خود داشته باشید.

مرحله ۵: نصب گواهی اقتدار ریشه جعلی را به فروشگاه مقامات ریشه قابل اعتماد

نصب کنید.

مرحله بعدی این است که اقتدار ریشه جعلی را که ما ایجاد کردیم به یک اقتدار کاملاً قابل اعتماد در این دستگاه تبدیل کنیم. هنگامی که ما این کار را انجام می دهیم ، تمام گواهینامه های امضا شده توسط آن مقام به عنوان مورد اعتماد رفتار می شوند (دوباره ، فقط در این دستگاه). سپس می توانیم هر تعداد گواهی را با آن مقام امضا کنیم و همه آنها را به طور خودکار در همان محیط اعتماد کنیم.

با این حال ، این فقط فقط روی دستگاهی کار می کند که گواهینامه ریشه جعلی برای اعتماد به نفس تنظیم شده است. این با طراحی است گواهینامه های خود امضا شده فقط باید در محیط هایی کار کنند که ما آنها را به عنوان قابل اعتماد تعیین می کنیم.

برای اعتماد به اقتدار ریشه جعلی ، به Snap-In Certificate Manager برگردید. در صفحه سمت راست ، "مقامات صدور گواهینامه ریشه مورد اعتماد" را گسترش دهید ، سپس گواهینامه ها را کلیک کرده و "همه کارها | واردات" را انتخاب کنید.

یک جادوگر باعث می شود شما یک پرونده گواهی را برای واردات انتخاب کنید. پرونده FAKECA.CRT صادر شده خود را انتخاب کرده و گواهی را در فروشگاه مقامات صدور گواهینامه Root Trusted قرار دهید. یک هشدار امنیتی و تأیید امنیتی دریافت خواهید کرد و از شما می پرسید که آیا می خواهید گواهی را نصب کنید یا خیر. بله را انتخاب کنید.

وقتی تمام شد ، باید گواهی FAKECA را در فروشگاه نشان دهید.

گواهینامه مرجع ریشه جعلی اکنون به

اضافه کردن گواهینامه Authority Fake Root به فروشگاه مقامات صدور گواهینامه Root معتبر. به هر چیزی که با این گواهینامه امضا شده است اکنون در این دستگاه اعتماد دارد.

idg

مرحله ۶: کد را با SignTool امضا کنید

اگر یک گواهی Authority Fake Root ایجاد کرده اید ، اکنون کاملاً مجهز به امضای باینری ها هستید. اگر گواهی امضای کد را از مجوز گواهی به دست آورده اید ، باید دستورالعمل های مربوط به آن را در مورد نحوه تنظیم آن بر روی دستگاهی که می خواهید امضای آن را انجام دهید ، دریافت کرده اید ، و نحوه ایجاد یک پرونده گواهی همانطور که در بالا برای گواهینامه خود امضا کردیم.

در یک جلسه جدید PowerShell یا جلسه ای که قبلاً باز کرده اید ، به دایرکتوری که باینری را که می خواهید امضا کنید ، بروید. ممکن است بخواهید قبل از امضای یک نسخه پشتیبان از باینری تهیه کنید ، فقط در مورد.

برای امضای باینری با گواهی خود ، دستور SignTool و علامت آن آن را به شرح زیر اجرا کنید.


signtool.exe sign /f Path\To\cert.pfx /p password /t http://timestamp.digicert.com /fd sha256 your_program.exe

در اینجا آنچه هر یک از گزینه های فوق انجام می دهد:

  • /f مسیر پرونده .pfx را برای گواهی شما فراهم می کند. اگر از یک گواهی خود امضا شده استفاده کرده اید ، از پرونده testcert.pfx استفاده کرده ایم که قبلاً صادر کردیم. به یاد داشته باشید اگر فضاها را شامل می شود مسیر را در نقل قول ها محصور کنید.
  • /p رمز عبور گواهی را که قبلاً استفاده کردیم فراهم می کند.
  • /t URL را برای یک سرویس زمانی فراهم می کند که می تواند برای زمان بندی امضای استفاده شود. این مهم است زیرا به امضای اجازه می دهد تا حتی پس از اتمام گواهینامه اصلی ، معتبر بماند.
  • /fd یک الگوریتم هش را برای امضای تنظیم می کند ، که به طور معمول sha256 است.
  • your_program.exe باینری است که باید امضا شود.

هنگامی که دستور SignTools را اجرا کردید ، باید خروجی زیر را مشاهده کنید.


Done Adding Additional Store
Successfully signed: your_program.exe

اگر روی برنامه خود در Explorer کلیک راست کرده و “Properties | امضاهای دیجیتال” را انتخاب کنید ، باید Fakeca را که در زیر امضاهای تعبیه شده ذکر شده است ، مشاهده کنید.

امضای دیجیتال در باینری امضا شده

یک باینری امضا شده امضاهای تعبیه شده خود را در صفحه امضاهای دیجیتال از خصوصیات پرونده خود نشان می دهد.

idg

اگر جزئیات مربوط به امضای ریشه را انتخاب می کنید ، باید اطلاعات بیشتری در مورد امضای را مطابق شکل زیر مشاهده کنید.

جزئیات مربوط به امضای دیجیتال باینری خود امضا شده

جزئیات مربوط به امضای دیجیتال باینری خود امضا شده. “امضای دیجیتال خوب است” نشان می دهد که امضای به عنوان معتبر در آن سیستم پذیرفته شده است.

idg

با استفاده از گواهینامه های خود امضا شده در سایر سیستم ها

باینری هایی که با گواهینامه های امضاء کد شخص ثالث امضا شده اند باید در هر کجا معتبر باشند ، زیرا آنها با یک گواهی معتبر معتبر ریشه امضا شده اند.

کد خود امضا شده ، فقط در دستگاه های نصب شده در مجوز Authority Fake Root Authority معتبر خواهد بود. اگر به باینری های امضا شده نیاز دارید که به عنوان معتبر در چندین دستگاه شناخته شوند ، باید گواهی FAKECA خود را در آن دستگاه ها وارد کرده و به گواهینامه در آنجا اعتماد کنید ، همانطور که در بالا توضیح داده شد. به همین دلیل ما گواهینامه ها را به پرونده ها صادر کردیم: برای آسانتر کردن آنها در اطراف و استفاده از آنها برای امضای چندین دستگاه.