شهادات موقعة ذاتيا هي طريقة سهلة لإجراء الاختبار والمهام الأخرى الأقل أهمية. لا تحتوي الشهادات الموقعة ذاتيًا على سلسلة موثوقة من الشهادات التي تدعمها ويتم توقيعها بواسطة المستخدم الذي قام بإنشائها. إذا كنت تثق في الكيان الذي وقع على الشهادة، فيمكنك استخدامها تمامًا كما تفعل مع كيان تم التحقق من صحته بشكل صحيح.
إذا كنت بحاجة إلى إنشاء شهادة موقعة ذاتيًا، فإحدى الطرق التي يمكنك من خلالها القيام بذلك هي باستخدام PowerShell. ستتعلم في هذه المقالة كيفية إنشاء شهادة موقعة ذاتيًا في PowerShell.
إنشاء شهادة موقعة ذاتيا
لإنشاء شهادة موقعة ذاتيًا باستخدام PowerShell، يمكنك استخدام New-SelfSignedCertificate cmdlet. تم تضمين أمر cmdlet هذا في ملف
PKI
وحدة.
هناك العديد من الخيارات عندما يتعلق الأمر بإنشاء الشهادات. أنواع الشهادات الموقعة ذاتيًا الشائعة هي
SSLServerAuthentication
(الافتراضي لأمر cmdlet) و
CodeSigning
. كما يمكنك إنشاء
DocumentEncryptionCert
، وهو مفيد جدًا لتشفير الملفات، وأخيرًا أ
Custom
الشهادة التي تتيح لك تحديد العديد من الخيارات المخصصة.
دعونا نمضي قدما وننشئ منتظما
SSLServerAuthentication
شهادة. يُستخدم هذا عادةً لحماية مواقع الويب باستخدام تشفير SSL. يمكنك رؤية مثال على ذلك أدناه. في هذا المثال، يتم تخزين الشهادة في ملف
Cert:LocalMachineMy Certificate Store
.
$Params = @{
"DnsName" = @("mywebsite.com","www.mywebsite.com")
"CertStoreLocation" = "Cert:LocalMachineMy"
"NotAfter" = (Get-Date).AddMonths(6)
"KeyAlgorithm" = "RSA"
"KeyLength" = "2048"
}PS C:> New-SelfSignedCertificate @Params
PSParentPath: Microsoft.PowerShell.SecurityCertificate::LocalMachineMy
Thumbprint Subject EnhancedKeyUsageList
4EFF6B1A0F61B4BG692C77F09889BD151EE8BB58 CN=mywebsite.com {Client Authentication, Server Authentication}
إذا سارت الأمور على ما يرام، فمن المفترض أن يكون لديك الآن شهادة تم إنشاؤها حديثًا! ستلاحظ أن الإخراج يُرجع الموضوع ولكن الموضوع يعرض فقط العنصر الأول الذي تم تمريره إليه عبر الملف DnsName المعلمة. وذلك لأن عنوان URL الثاني يصبح جزءًا من القائمة البديلة للموضوع.
*لاحظ أنه إذا حاولت تشغيل هذا، وليس كمسؤول، فسوف تحصل على رسالة خطأ مثل ما يلي:
New-SelfSignedCertificate: CertEnroll::CX509Enrollment::_CreateRequest: Access denied. 0x80090010 (-2146893808 NTE_PERM)
كما يمكنك أن تقول مع Access denied، ليس لديك إذن بتشغيل هذا بعد.*
العثور على معلومات حول شهادتنا
دعونا نتأكد من إنشاء الشهادة بالطريقة التي توقعناها. للعثور على معلومات حول شهادة معينة باستخدام PowerShell، يمكنك استخدام ملف Get-ChildItem cmdlet، تمامًا كما قد تقوم بإدراج الملفات في الدليل.
PS C:> Get-ChildItem -Path "Cert:LocalMachineMy" | Where-Object Thumbprint -EQ 4EFF6B1A0F61B4BF692C77F09889AD151EE8BB58 | Select-Object *PSPath : Microsoft.PowerShell.SecurityCertificate::LocalMachineMy4EFF6B1A0F61B4BF692C77F09889AD151EE8BB58
58
PSParentPath : Microsoft.PowerShell.SecurityCertificate::LocalMachineMy
PSChildName : 4EFF6B1A0F61B4BF692C77F09889AD151EE8BB58
PSDrive : Cert
PSProvider : Microsoft.PowerShell.SecurityCertificate
PSIsContainer : False
EnhancedKeyUsageList : {Client Authentication (1.3.6.1.5.5.7.3.2), Server Authentication (1.3.6.1.5.5.7.3.1)}
DnsNameList : {mywebsite.com, www.mywebsite.com}
SendAsTrustedIssuer : False
EnrollmentPolicyEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
EnrollmentServerEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
PolicyId :
Archived : False
Extensions : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid,
System.Security.Cryptography.Oid, System.Security.Cryptography.Oid}
FriendlyName :
HasPrivateKey : True
PrivateKey : System.Security.Cryptography.RSACng
IssuerName : System.Security.Cryptography.X509Certificates.X500DistinguishedName
NotAfter : 6/22/2020 11:50:15 AM
NotBefore : 12/22/2019 10:40:20 AM
PublicKey : System.Security.Cryptography.X509Certificates.PublicKey
RawData : {48, 130, 3, 55...}
SerialNumber : 608C4D5E6B8D41B44ADDC6BD725FE264
SignatureAlgorithm : System.Security.Cryptography.Oid
SubjectName : System.Security.Cryptography.X509Certificates.X500DistinguishedName
Thumbprint : 4EFF6B1A0F61B4BF692C77F09889AD151EE8BB58
Version : 3
Handle : 2628421609632
Issuer : CN=mywebsite.com
Subject : CN=mywebsite.com
هناك الكثير من المعلومات الرائعة هنا، ولكن قد تلاحظها في DnsNameList أن كلا الموقعين معروضان الآن. بالإضافة إلى ذلك، NotAfter تتم تعبئة التاريخ بشكل صحيح ليكون 6 أشهر من تاريخ الإنشاء.
شهادة توقيع الرمز
إذا كنت تعمل في PowerShell، فسوف تعرف عنه سياسات التنفيذ. إذا تم تعيين سياسة التنفيذ على AllSigned فإنك ستحتاج إلى التوقيع على كل برنامج نصي يتم تشغيله على نظامك. لإنشاء شهادة للقيام بذلك، الأمر بسيط جدًا!
PS C:> New-SelfSignedCertificate -Type 'CodeSigningCert' -DnsName 'MyHost'PSParentPath: Microsoft.PowerShell.SecurityCertificate::LocalMachineMY
Thumbprint Subject EnhancedKeyUsageList
14D535EG834370293BA103159EB00876A79959D8 CN=MyHost Code Signing
شهادة حماية الوثائق
ربما لم تواجه هذا الأمر كثيرًا من قبل، ولكن PowerShell، باستخدام واجهة برمجة تطبيقات حماية البيانات، يمكنه تشفير الملفات الموجودة على نظامك باستخدام شهادة حماية المستندات. باستخدام New-SelfSignedCertificate cmdlet، يمكننا بسهولة إنشاء شهادة لتشفير مستنداتك.
$Params = @{
"DnsName" = "MyHost"
"CertStoreLocation" = "Cert:CurrentUserMy"
"KeyUsage" = "KeyEncipherment","DataEncipherment","KeyAgreement"
"Type" = "DocumentEncryptionCert"
}PS C:> New-SelfSignedCertificate @Params
Thumbprint Subject EnhancedKeyUsageList
14D535EG934370293BA203159EB00876A79959D8 CN=MyHost Document Encryption
باستخدام هذا النوع من الشهادات، يمكنك الآن استخدام الشهادة التي تم إنشاؤها لتشفير المحتوى وفك تشفيره باستخدام أوامر PowerShell مثل Protect-CMSMessage و UnProtect-CMSMessage.
يصبح تشفير/فك تشفير محتوى مثل هذا مفيدًا إذا كنت بحاجة إلى تمرير البيانات المشفرة حيث يمكنك بعد ذلك استخدام هذه الشهادة على نظام آخر لفك تشفير البيانات. إذا كنت تعتمد على واجهة برمجة تطبيقات حماية البيانات (DPAPI) القياسية المضمنة في Windows، فلن تتمكن من فك تشفير البيانات الموجودة على أنظمة أخرى أو لمستخدمين آخرين.
ملخص
يجعل PowerShell إنشاء شهادات موقعة ذاتيًا أمرًا سهلاً للغاية. تحتوي هذه الشهادات على عدد لا يحصى من الاستخدامات، ولكن هناك ملاحظة مهمة يجب تذكرها وهي أنه يجب استخدامها فقط في الاختبار. لن يكون لديك سلسلة ثقة صالحة للتحقق من صحة الشهادات الموقعة ذاتيًا.
نظرًا لمدى سرعة وسهولة إنشاء شهادات موقعة ذاتيًا، يمكنك البدء في القيام بذلك اليوم وتشفير أي اتصالات أو بيانات تحتاج إليها بشكل صحيح!
(العلامات للترجمة)مايكروسوفت