अधिकांश Windows प्रशासक, जो PKI से परिचित हैं, MakeCert.exe टूल के बारे में जानते हैं, जो सेल्फ-साइन सर्टिफिकेट बनाने की अनुमति देता है। यह टूल Microsoft .NET Framework SDK और Microsoft Windows SDK का हिस्सा है। आधुनिक Windows संस्करणों (Windows 10/8.1 और Windows Server 2019/2016/2012R2) पर आप बिल्ट-इन PowerShell cmdlet New-SelfSignedCertificate का उपयोग करके अतिरिक्त टूल के बिना सेल्फ-साइन सर्टिफिकेट बना सकते हैं।
सेल्फ-साइन सर्टिफिकेट बनाने के लिए New-SelfSignedCertificate PowerShell Cmdlet का उपयोग करना
PowerShell के साथ सेल्फ-साइन सर्टिफिकेट बनाने के लिए, आप New-SelfSignedCertificate cmdlet का उपयोग कर सकते हैं, जो PoSh PKI (पब्लिक की इन्फ्रास्ट्रक्चर) मॉड्यूल का हिस्सा है:
PKI मॉड्यूल में उपलब्ध सभी cmdlets सूचीबद्ध करने के लिए, कमांड चलाएं।
Get-Command -Module PKI

सेल्फ-साइन सर्टिफिकेट का उपयोग परीक्षण उद्देश्यों के लिए या आंतरिक इंट्रानेट सेवाओं (IIS, Exchange, Web Application Proxy, LDAPS, ADRMS, DirectAccess, आदि) के लिए सर्टिफिकेट प्रदान करने के लिए करने की सिफारिश की जाती है यदि आप PKI/CA इन्फ्रास्ट्रक्चर तैनात नहीं कर सकते या किसी बाहरी प्रदाता से विश्वसनीय सर्टिफिकेट खरीद नहीं सकते।
सुझाव. यह न भूलें कि आप Let's Encrypt से मुफ्त SSL सर्टिफिकेट आसानी से प्राप्त कर सकते हैं। यहां Windows Server पर IIS साइट से बाइंड करने के लिए Let's Encrypt SSL सर्टिफिकेट जारी करने का एक उदाहरण है।सर्टिफिकेट बनाने के लिए, आपको –DnsName (सर्वर का नाम, नाम मनमाना हो सकता है और लोकलहोस्ट नाम से अलग हो सकता है) और -CertStoreLocation (लोकल सर्टिफिकेट स्टोर जिसमें जेनरेट किया गया सर्टिफिकेट रखा जाएगा) के मान निर्दिष्ट करने होंगे। आप इस cmdlet का उपयोग Windows 10 (इस उदाहरण में), Windows 8.1 और Windows Server 2019/2016/2012 R2/2012 पर सेल्फ-साइन सर्टिफिकेट बनाने के लिए कर सकते हैं।
DNS नाम test.contoso.com के लिए एक नया SSL सर्टिफिकेट (डिफ़ॉल्ट SSLServerAuthentication प्रकार का) बनाने के लिए (FQDN नाम का उपयोग करें) और इसे कंप्यूटर पर पर्सनल सर्टिफिकेट की सूची में रखने के लिए, निम्न कमांड चलाएं:
New-SelfSignedCertificate -DnsName test.contoso.com -CertStoreLocation cert:\LocalMachine\My

Directory: Microsoft.PowerShell.Security\Certificate::LocalMachine\My Thumbprint Subject ---------- ------- 2175A76B10F843676951965F52A718F635FFA043 CN=test.contoso.com
यदि आप इस कमांड को नॉन-एलिवेटेड PowerShell सत्र में चलाते हैं (लोकल एडमिन अनुमति के बिना), तो एक त्रुटि दिखाई देती है:
New-SelfSignedCertificate : CertEnroll::CX509Enrollment::_CreateRequest: Access denied. 0x80090010 (-2146893808 NTE_PERM)
यदि आपने नॉन-स्टैंडर्ड क्रिप्टोग्राफिक प्रोवाइडर (CSP) निर्दिष्ट किया है, उदाहरण के लिए, -KeyAlgorithm "ECDSA_secP256r1" -Provider "Microsoft Smart Card Key Storage Provider" पैरामीटर का उपयोग करके, सुनिश्चित करें कि यह आपके कंप्यूटर पर इंस्टॉल है (डिफ़ॉल्ट Microsoft Enhanced Cryptographic Provider CSP है)। अन्यथा, एक त्रुटि दिखाई देगी:
New-SelfSignedCertificate: CertEnroll::CX509Enrollment::_CreateRequest: Provider type not defined. 0x80090017 (-2146893801 NTE_PROV_TYPE_NOT_DEF).
यह कमांड एक नया सर्टिफिकेट बनाती है और इसे कंप्यूटर के पर्सनल सर्टिफिकेट स्टोर में इंपोर्ट करती है। certlm.msc MMC स्नैप-इन खोलें, सुनिश्चित करें कि सर्टिफिकेट स्टोर के Personal सेक्शन में एक नया सर्टिफिकेट दिखाई देता है।
डिफ़ॉल्ट रूप से, एक सेल्फ-साइन सर्टिफिकेट निम्न सेटिंग्स के साथ जेनरेट होता है:
- क्रिप्टोग्राफिक एल्गोरिदम: RSA;
- की लंबाई: 2048 बिट;
- स्वीकार्य की उपयोग: क्लाइंट ऑथेंटिकेशन और सर्वर ऑथेंटिकेशन;
- सर्टिफिकेट का उपयोग इसके लिए किया जा सकता है: डिजिटल सिग्नेचर, की एन्क्रिप्शन;
- सर्टिफिकेट वैधता अवधि: 1 वर्ष।
जैसा कि आप देख सकते हैं, सर्टिफिकेट गुण इंगित करते हैं कि इस सर्टिफिकेट का उपयोग क्लाइंट ऑथेंटिकेशन के लिए किया जा सकता है, लेकिन यह सर्वर ऑथेंटिकेशन के लिए भी मान्य है।

Get-ChildItem cmdlet का उपयोग करके, आप इसके Thumbprint द्वारा बनाए गए सर्टिफिकेट के सभी पैरामीटर प्रदर्शित कर सकते हैं:
Get-ChildItem -Path "Cert:\LocalMachine\My" | Where-Object Thumbprint -eq 2175A76B10F843676951965F52A718F635FFA043 | Select-Object *

PSPath : Microsoft.PowerShell.Security\Certificate::LocalMachine\My\2175A76B10F843676951965F52A718F635FFA043
PSParentPath : Microsoft.PowerShell.Security\Certificate::LocalMachine\My
PSChildName : 2175A76B10F843676951965F52A718F635FFA043
PSDrive : Cert
PSProvider : Microsoft.PowerShell.Security\Certificate
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 : {test.contoso.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 :
IssuerName : System.Security.Cryptography.X509Certificates.X500DistinguishedName
NotAfter : 05/11/2021 06:19:42
NotBefore : 05/11/2020 05:59:42
HasPrivateKey : True
PrivateKey :
PublicKey : System.Security.Cryptography.X509Certificates.PublicKey
RawData : {48, 130, 3, 45...}
SerialNumber : 6797F5E3F870478D4D3798BEB291DBF3
SubjectName : System.Security.Cryptography.X509Certificates.X500DistinguishedName
SignatureAlgorithm : System.Security.Cryptography.Oid
Thumbprint : 2175A76B10F843676951965F52A718F635FFA043
Version : 3
Handle : 2834444631568
Issuer : CN=test.contoso.com
Subject : CN=test.contoso.com
नोट. ऐसा सेल्फ-साइन सर्टिफिकेट इसकी निर्माण तिथि से 1 वर्ष में समाप्त हो जाएगा। आप –NotAfter विकल्प का उपयोग करके एक अलग सर्टिफिकेट वैधता अवधि सेट कर सकते हैं। उदाहरण के लिए, आप निम्न कमांड के साथ तीन-वर्ष की वैधता अवधि वाला SSL/TLS सर्टिफिकेट जारी कर सकते हैं:
$todaydt = Get-Date
$3years = $todaydt.AddYears(3)
New-SelfSignedCertificate -dnsname test.contoso.com -notafter $3years -CertStoreLocation cert:\LocalMachine\My
आप एक सर्टिफिकेट चेन बना सकते हैं। पहले, एक रूट सर्टिफिकेट (CA) बनाया जाता है, और उस पर आधारित, एक SSL सर्वर सर्टिफिकेट जेनरेट किया जाता है:
$rootCert = New-SelfSignedCertificate -Subject 'CN=TestRootCA,O=TestRootCA,OU=TestRootCA' -KeyExportPolicy Exportable -KeyUsage CertSign,CRLSign,DigitalSignature -KeyLength 2048 -KeyUsageProperty All -KeyAlgorithm 'RSA' -HashAlgorithm 'SHA256' -Provider 'Microsoft Enhanced RSA and AES Cryptographic Provider'
New-SelfSignedCertificate -CertStoreLocation cert:\LocalMachine\My -DnsName "test2.contoso.com" -Signer $rootCert -KeyUsage KeyEncipherment,DigitalSignature
जेनरेट किए गए सर्टिफिकेट को प्राइवेट की के साथ पासवर्ड-सुरक्षित PFX फ़ाइल में एक्सपोर्ट करने के लिए, आपको इसका Thumbprint निर्दिष्ट करना होगा। इसे New-SelfSignedCertificate कमांड के परिणामों से कॉपी किया जा सकता है। आपको सर्टिफिकेट सुरक्षा पासवर्ड भी निर्दिष्ट करना होगा और इसे SecureString फॉर्मेट में बदलना होगा:
$CertPassword = ConvertTo-SecureString -String "YourPassword" -Force –AsPlainText
Export-PfxCertificate -Cert cert:\LocalMachine\My\2779C7928D055B21AAA0Cfe2F6BE1A5C2CA83B30 -FilePath C:\test.pfx -Password $CertPassword
सर्टिफिकेट पब्लिक की को इस तरह एक्सपोर्ट किया जा सकता है:
Export-Certificate -Cert Cert:\LocalMachine\My\2779C7928D055B21AAA0Cfe2F6BE1A5C2CA83B30 -FilePath C:\tstcert.cer
सुनिश्चित करें कि निर्दिष्ट डायरेक्टरी में *.cer (PFX) सर्टिफिकेट फ़ाइल दिखाई देती है। यदि आप इस पर राइट-क्लिक करते हैं और मेनू आइटम "Install Certificate" चुनते हैं, तो आप Certificate Import Wizard का उपयोग करके सर्टिफिकेट को अपने कंप्यूटर पर विश्वसनीय रूट सर्टिफिकेट में जोड़ सकते हैं।

सर्ट स्टोर स्थान चुनें → Local Machine, सभी सर्टिफिकेट को निम्न स्टोर में रखें → Trusted Root Certification Authorities।

आप कमांड का उपयोग करके एक सर्टिफिकेट बना सकते हैं और तुरंत इसे कंप्यूटर के विश्वसनीय रूट सर्टिफिकेट स्टोर में इंपोर्ट कर सकते हैं:
$SelfSignCert=New-SelfSignedCertificate …..
$certFile = Export-Certificate -Cert $SelfSignCert -FilePath C:\ps\export-certname.cer
Import-Certificate -CertStoreLocation Cert:\LocalMachine\AuthRoot -FilePath $certFile.FullName
यह पब्लिक की या सर्टिफिकेट फ़ाइल स्वयं GPO का उपयोग करके Active Directory डोमेन में सभी कंप्यूटरों और सर्वरों पर तैनात की जा सकती है (डोमेन कंप्यूटरों पर GPO का उपयोग करके सर्टिफिकेट कैसे तैनात करें?)।
सब्जेक्ट अल्टरनेटिव नेम्स के साथ सेल्फ-साइन सर्टिफिकेट बनाएं
New-SelfSignedCertificate cmdlet की उपयोगी विशेषताओं में से एक कई अलग-अलग नामों, सब्जेक्ट अल्टरनेटिव नेम्स (SAN) के साथ सर्टिफिकेट बनाने की क्षमता है।
नोट.Makecert.exe टूल, New-SelfSignedCertificate cmdlet के विपरीत, SAN और वाइल्डकार्ड सर्टिफिकेट जेनरेट नहीं कर सकता।
यदि आप कई नामों के साथ सर्टिफिकेट बनाना चाहते हैं, तो DnsName पैरामीटर का पहला नाम सर्टिफिकेट के CN (कॉमन नेम) के रूप में उपयोग किया जाएगा। उदाहरण के लिए, आइए निम्न नामों के साथ एक सेल्फ-साइन SAN सर्टिफिकेट बनाएं:
- सब्जेक्ट नेम (CN): adfs1.contoso.com
- सब्जेक्ट अल्टरनेटिव नेम (DNS): web_gw.contoso.com
- सब्जेक्ट अल्टरनेटिव नेम (DNS): enterprise_reg.contoso.com
सर्टिफिकेट बनाने के लिए कमांड इस तरह दिखेगी:
New-SelfSignedCertificate -DnsName adfs1.contoso.com,web_gw.contoso.com,enterprise_reg.contoso.com -CertStoreLocation cert:\LocalMachine\My

इसके अलावा, आप पूरे डोमेन नेमस्पेस के लिए वाइल्डकार्ड सर्टिफिकेट भी जेनरेट कर सकते हैं। ऐसा करने के लिए, सर्वर नाम के रूप में *.contoso.com निर्दिष्ट करें।
New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname *.contoso.com
Windows पर कोड साइनिंग के लिए सेल्फ-साइन सर्टिफिकेट जेनरेट करें
PowerShell 3.0 में, New-SelfSignedCertificate cmdlet केवल SSL सर्टिफिकेट जेनरेट करता है जिनका उपयोग ड्राइवर, एप्लिकेशन या स्क्रिप्ट कोड पर हस्ताक्षर करने के लिए नहीं किया जा सकता (MakeCert यूटिलिटी द्वारा जेनरेट किए गए सर्टिफिकेट के विपरीत)।
PowerShell संस्करण 5.0 और बाद में, New-SelfSignedCertificate cmdlet का एक नया संस्करण अब कोड साइनिंग सर्टिफिकेट जारी करने के लिए उपयोग किया जा सकता है।
सेल्फ-साइन एप्लिकेशन कोड साइनिंग सर्टिफिकेट बनाने के लिए, कमांड चलाएं:
$cert = New-SelfSignedCertificate -Subject "My Code Signing Certificate" -Type CodeSigningCert -CertStoreLocation cert:\LocalMachine\My
अब आप अपने PowerShell स्क्रिप्ट को सेल्फ-साइन सर्टिफिकेट के साथ साइन कर सकते हैं:
Set-AuthenticodeSignature -FilePath C:\PS\my_posh_script.ps1 -Certificate $cert
यदि आप कमांड निष्पादित करते समय UnknownError चेतावनी प्राप्त कर रहे हैं, तो इसका मतलब है कि सर्टिफिकेट विश्वसनीय नहीं है, क्योंकि यह उपयोगकर्ता के पर्सनल सर्टिफिकेट स्टोर में स्थित है।

आपको इसे विश्वसनीय रूट सर्टिफिकेट स्टोर में ले जाने की आवश्यकता है (Windows सर्टिफिकेट रूट स्टोर को अनविश्वसनीय और संदिग्ध सर्टिफिकेट के लिए समय-समय पर स्कैन करना न भूलें और विश्वसनीय रूट सर्टिफिकेट की सूची अपडेट करें)।
Move-Item -Path $cert.PSPath -Destination "Cert:\CurrentUser\Root"
उसके बाद, आप अपने PowerShell स्क्रिप्ट को इस सेल्फ-साइन सर्टिफिकेट के साथ साइन कर सकते हैं।
Windows Server IIS पर SHA-256 सेल्फ-साइन SSL सर्टिफिकेट का उपयोग करना
कृपया ध्यान दें कि जब इंटरनेट इंफॉर्मेशन मैनेजर कंसोल (Create Self-Signed Certificate एक्शन मेनू आइटम) के माध्यम से IIS के लिए सेल्फ-साइन सर्टिफिकेट बनाया जाता है, तो SHA-1 एन्क्रिप्शन एल्गोरिदम का उपयोग करके एक SSL सर्टिफिकेट बनाया जाता है। ऐसे सर्टिफिकेट कई ब्राउज़र द्वारा अविश्वसनीय माने जाते हैं और सुरक्षित कनेक्शन स्थापित करने के लिए उपयोग नहीं किए जा सकते (या आपको अन्य SSL त्रुटियां दिखाई दे सकती हैं)। New-SelfSignedCertificate cmdlet आपको SHA-256 एन्क्रिप्शन एल्गोरिदम का उपयोग करके अधिक लोकप्रिय प्रकार का सर्टिफिकेट बनाने की अनुमति देता है।

आप PowerShell के साथ जेनरेट किए गए सेल्फ-साइन SHA-256 सर्टिफिकेट को Windows Server पर IIS साइट से बाइंड कर सकते हैं। यदि आप PowerShell का उपयोग करके SSL सर्टिफिकेट बनाते हैं और इसे कंप्यूटर के सर्टिफिकेट स्टोर में रखते हैं, तो यह स्वचालित रूप से IIS साइट्स के लिए उपलब्ध होगा।

IIS मैनेजर कंसोल शुरू करें, अपनी साइट चुनें, और फिर Site Binding विकल्पों में, आपके द्वारा बनाया गया सर्टिफिकेट चुनें और अपने परिवर्तन सहेजें।