2012-09-17 13 views
5

मैं आईआईएस में इस्तेमाल के लिए एक स्व-हस्ताक्षरित प्रमाणपत्र बनाने के लिए यहां पाया गया कि के समान कोड का उपयोग कर रहा: http://blogs.technet.com/b/vishalagarwal/archive/2009/08/22/generating-a-certificate-self-signed-using-powershell-and-certenroll-interfaces.aspxPowerShell का उपयोग बनाने के लिए स्व-हस्ताक्षरित प्रमाणपत्र

वर्क्स ठीक छोड़कर मैं इसे कोई दोस्ताना नाम देना चाहता हूँ जब मैं एक गतिशील रूप से बनाई गई साइट पर प्रमाण पत्र असाइन करना चाहता हूं तो इसे आसान बनाना।

कोई भी जानता है कि उपरोक्त को दोस्ताना नाम सेट करने के लिए कैसे बदला जाए (मैंने कोशिश की है कि कोई फायदा नहीं हुआ)।

PowerShell के माध्यम से एक प्रमाणपत्र बनाने का एक बेहतर तरीका है जो उपयोगकर्ता को जानकारी के लिए संकेत नहीं देता है?

स्क्रिप्ट मैं उपयोग कर रहा हूँ पर फॉलोअप - ऊपर यूआरएल पर आधारित है लेकिन एक cmdlet में बदल गया:

function Add-SelfSignedCertificate 
{ 
    [CmdletBinding()] 
    param 
    (
      [Parameter(Mandatory=$True, ValueFromPipelineByPropertyName=$True)] 
      [Alias('cn')] 
      [string]$CommonName 
    ) 

    $name = new-object -com "X509Enrollment.CX500DistinguishedName.1" 
    $name.Encode("CN=$CommonName", 0) 

    $key = new-object -com "X509Enrollment.CX509PrivateKey.1" 
    $key.ProviderName = "Microsoft RSA SChannel Cryptographic Provider" 
    $key.KeySpec = 1 
    $key.Length = 1024 
    $key.SecurityDescriptor = "D:PAI(A;;0xd01f01ff;;;SY)(A;;0xd01f01ff;;;BA)(A;;0x80120089;;;NS)" 
    $key.MachineContext = 1 
    $key.Create() 

    $serverauthoid = new-object -com "X509Enrollment.CObjectId.1" 
    $serverauthoid.InitializeFromValue("1.3.6.1.5.5.7.3.1") 
    $ekuoids = new-object -com "X509Enrollment.CObjectIds.1" 
    $ekuoids.add($serverauthoid) 
    $ekuext = new-object -com "X509Enrollment.CX509ExtensionEnhancedKeyUsage.1" 
    $ekuext.InitializeEncode($ekuoids) 

    $cert = new-object -com "X509Enrollment.CX509CertificateRequestCertificate.1" 
    $cert.InitializeFromPrivateKey(2, $key, "") 
    $cert.Subject = $name 
    $cert.Issuer = $cert.Subject 
    $cert.NotBefore = get-date 
    $cert.NotAfter = $cert.NotBefore.AddDays(90) 
    $cert.X509Extensions.Add($ekuext) 
    $cert.Encode() 

    $enrollment = new-object -com "X509Enrollment.CX509Enrollment.1" 
    $enrollment.InitializeFromRequest($cert) 
    $certdata = $enrollment.CreateRequest(0) 
    $enrollment.InstallResponse(2, $certdata, 0, "") 
} 

उत्तर

0

स्कॉट Hanselman एसडीके उपकरण makecert.exe का उपयोग कर एक अच्छा blog post on how to create a self-signed cert ऊपर लिखा था। वह टूल आपके द्वारा संदर्भित पोस्ट में कोड की तुलना में उपयोग करने के लिए एक अच्छा थोड़ा आसान लगता है। Makecert.exe के साथ आप एक विषय नाम निर्दिष्ट करने के लिए -n विकल्प का उपयोग कर सकते हैं। मैंने उस विषय का नाम इस्तेमाल किया है जो सिग्नलोल.एक्सई जैसे अन्य उपकरणों में प्रमाण पत्र को संदर्भित करता है। हालांकि, मुझे पता चला है कि विषय के नाम अद्वितीय नहीं हैं इसलिए मैं थंबप्रिंट मान का उपयोग करता हूं जो अद्वितीय प्रतीत होता है। सिग्नलोल प्रमाण की पहचान करने के लिए थंबप्रिंट (/ sha1 पैरामीटर के माध्यम से) भी स्वीकार करेगा।

+0

यह एक इंस्टालशील्ड स्क्रिप्ट में शामिल होने जा रहा है इसलिए पॉपअप संवाद makecert.exe शो समस्याग्रस्त है। – roderickprince

+0

क्या selfssl.exe काम करेगा? http://www.robbagby.com/iis/self- हस्ताक्षर- प्रमाणपत्र-on-iis-7-the-easy-way-and-the-most-effective-way/ –

3

आप आप कोड में सीधे CertificateFriendlyName सेट कर सकते हैं, तो आप सिर्फ जानना चाहता है जहां यह सब करने की ज़रूरत:

$enrollment.InitializeFromRequest($cert) 
$enrollment.CertificateFriendlyName = 'whatever' 
$certdata = $enrollment.CreateRequest(0) 

$key एक FriendlyName है, लेकिन मैं नहीं दिख रहा है कि कहीं भी दिखा तो मुझे नहीं पता लगता है कि यह आपकी मदद करता है।

+0

अगर कोई पूरी तरह से काम करना चाहेगा उदाहरण के लिए http://aka.ms/AD2AAD पर स्क्रिप्ट में ऐसा करने के लिए PowerShell कोड है। –

11

यह अपने विशिष्ट उपयोग के लिए मदद नहीं कर सकते हैं, लेकिन एक नए PowerShell cmdlet Windows 8.1 और सर्वर 2012 में स्थापित है कि बहुत जल्दी और प्रयोग करने में आसान है नहीं है:

New-SelfSignedCertificate [-CertStoreLocation <String> ] [-CloneCert <Certificate> ] [-DnsName <String> ] [-Confirm] [-WhatIf] [ <CommonParameters>] 

अधिक जानकारी यहां पाया जा सकता है: http://technet.microsoft.com/en-us/library/hh848633.aspx

मेरे उपयोग में, प्रमाण पत्र का मित्रवत नाम हमेशा सीएमडीएलएट में निर्दिष्ट पहले डीएनएसनाम के रूप में सेट किया गया है।

उदाहरण है कि अपने स्थानीय कंप्यूटर के व्यक्तिगत दुकान में प्रमाण पत्र देता है:

New-SelfSignedCertificate -CertStoreLocation cert:\LocalMachine\My -DnsName www.example.com 

नोट: Powershell कार्यशील बनाने के लिए व्यवस्थापक अधिकार के साथ शुरू हो गया है।

+0

यह 'प्रमाणपत्र नहीं होना चाहिए: \ LocalMachine \ My'? मैंने अपनी विंडोज़ 10 और 2012 सर्वर मशीनों पर जांच की है ... कोई भी 'प्रमाण: \ LocalComputer' नहीं है। – Lucas

संबंधित मुद्दे