एक सशर्त का उपयोग कर IIS साइट के लिए एक बंधन जोड़ें


19

मैं एक IIS ऐप में पॉवरशेल का उपयोग करके बाइंडिंग को नियंत्रित करने की कोशिश कर रहा हूं। मैं एक स्क्रिप्ट का उपयोग करके http और https दोनों के साथ एक साइट बनाना चाहता हूं।

यह मेरे पास इस प्रकार है:

Param(
    [Parameter(Mandatory=$True,Position=1)]
    [string]$hostname,
    [Parameter(Mandatory=$True,Position=2)]
    [string]$installPath,
    [Parameter(Mandatory=$False,Position=3)]
    [string]$ip
)

Import-Module WebAdministration

$appPoolName =  $hostname + 'Pool'

$port = 80
$hostRecord = $hostname+'.example.com'

$bindings = @{protocol="http";bindingInformation=$ip + ":"+ $port + ":" + $hostRecord}

New-Item IIS:\AppPools\$appPoolName
Set-ItemProperty IIS:\AppPools\$appPoolName managedRuntimeVersion v4.0

New-Item IIS:\Sites\$hostname -Bindings $bindings -PhysicalPath $installPath
Set-ItemProperty IIS:\Sites\$hostname -Name applicationPool -Value $appPoolName

$bindingsअपने लक्ष्य को प्राप्त करने के लिए मैं अपने चर में बाइंडिंग कैसे जोड़ूं / किसी अन्य तंत्र का उपयोग करूं?

जवाबों:


24

आप न्यू-वेबबाइंडिंग का उपयोग कर सकते हैं: http://technet.microsoft.com/en-us/library/ee790567.aspx

जैसे

IIS:\>New-WebBinding -Name "Default Web Site" -IPAddress "*" -Port 80 -HostHeader TestSite

जब भी यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, तो उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर होगा
मार्क हेंडरसन

क्या आपको लगता है कि मैं तकनीकी लेख के निचले भाग की तुलना में बेहतर उदाहरण के साथ आऊंगा?
मैथ्यू

15
नहीं, लेकिन शायद आपको तकनीकी लेख का हिस्सा लेना चाहिए जो प्रासंगिक है और इसे उद्धरण ब्लॉक में यहां पुन: प्रस्तुत करें। मैंने कुछ ऐसा किया है जो पर्याप्त होना चाहिए।
मार्क हेंडरसन

क्या प्रभावी होने के लिए IIS को पुनरारंभ करना आवश्यक है?
क्रुणाल

10

मैं किसी साइट पर https बाइंडिंग जोड़ने की कोशिश कर रहा था और यह बहुत दर्दनाक हो सकता है। प्रत्येक चरण को पूरा करने के लिए बहुत सारे तरीके हैं और प्रत्येक में नुकसान है। मैं अंतिम समाधान की उम्मीद कर रहा हूं कि कोई इसे उपयोगी समझेगा।

यह समाधान मानता है कि आपके पास IIS स्थापित है और एक वेब साइट परिभाषित है। इस पोस्ट के प्रयोजनों के लिए साइट sample.contoso.com पर कॉल करें। मान लें कि आपके पास sample.contoso.com.pfx फ़ाइल में एक प्रमाणपत्र है जिसे आप भी उपयोग करना चाहते हैं।

पहला कदम फ़ाइल से प्रमाण पत्र आयात करना है।

$certPwd = ConvertTo-SecureString -String "password" -Force -AsPlainText
$webServerCert = Import-PfxCertificate -FilePath c:\some\folder\sample.contoso.com.pfx -CertStoreLocation Cert:\LocalMachine\My -Password $certPwd

यह पर्याप्त होगा तो अच्छा होगा। और कुछ मामलों में यह हो सकता है। हालांकि, मेरे लिए, इसने निजी कुंजी तक उचित पहुंच के बिना प्रमाण पत्र छोड़ दिया। इसके कारण एक पॉवरशेल त्रुटि हुई "एक निर्दिष्ट लॉगऑन सत्र मौजूद नहीं है। यह पहले से ही समाप्त हो सकता है" जब मैं प्रमाण पत्र को बाइंडिंग में जोड़ने गया था (बाद में वह चरण देखें)। तो, अगला कदम निजी कुंजी के लिए एसीएल को ठीक करना है।

$privateKeyFilename = $webServerCert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
$privateKeyFullPath = "c:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\"+$privateKeyFilename
$aclRule = "SYSTEM", "Full", "Allow"
$aclEntry = New-Object System.Security.AccessControl.FileSystemAccessRule $aclRule
$privateKeyAcl = (Get-Item $privateKeyFullPath).GetAccessControl("Access")
$privateKeyAcl.AddAccessRule($aclEntry)
Set-Acl $privateKeyFullPath $privateKeyAcl

यह स्थानीय सिस्टम को निजी कुंजी तक पूर्ण पहुंच प्रदान करने की अनुमति देगा यदि वह युक्त फ़ोल्डर से विरासत में नहीं मिला है।

यदि आप एक प्रमाणपत्र प्राप्त करना चाहते हैं जो पहले से ही स्थापित है, तो आपको इसके लिए हैश चाहिए और गेट-आइटम के साथ इसे पुनः प्राप्त कर सकते हैं:

$webServerCert = get-item Cert:\LocalMachine\My\XFX2DX02779XFD1F6F4X8435A5X26ED2X8DEFX95

अगला कदम बंधन बनाना है।

New-WebBinding -Name sample.contoso.com -IPAddress * -Port 443 -Protocol "https"

यह ध्यान रखना महत्वपूर्ण है कि "https" केस संवेदी है। यदि आप इसके बजाय "HTTPS" का उपयोग करते हैं, तो आपको वास्तव में अलग बाध्यकारी परिणाम मिलता है।

इस बाइंडिंग में अभी तक कोई प्रमाणपत्र संलग्न नहीं है, इसलिए अंतिम चरण प्रमाण पत्र संलग्न करना है। यदि प्रमाण पत्र ठीक से विश्वसनीय है और सुरक्षा सही है, तो यह चरण सफल होना चाहिए। यदि यह प्रमाणपत्र के साथ कोई समस्या है, तो यह नकचढ़ा हो सकता है।

$bind = Get-WebBinding -Name $webSiteDNSName -Protocol https
$bind.AddSslCertificate($webServerCert.GetCertHashString(), "my")

यदि यह लॉगऑन सत्र के बारे में एक संदेश के साथ विफल रहता है, तो प्रमाणपत्र में कुछ समस्या हो सकती है। अधिक विवरण के लिए इवेंट व्यूअर की समीक्षा करें। अपने प्रयासों के दौरान, मुझे सुरक्षा लॉग में इवेंट 5061 मिला। जब यह विफल हो गया, तो यह पता चला कि OpenKey 80090016 के साथ विफल हुआ (The Keyset does Exist)। और विफलता इसलिए थी क्योंकि सिस्टम के पास निजी कुंजी तक पहुंच नहीं थी।

मेरे लिए https बाइंडिंग बनाना पर्याप्त था। Http बाइंडिंग, न्यू-वेबसाइट cmdlet का उपयोग करने का एक अनुत्पादक था। यदि यह मुफ्त में नहीं आता है, तो मैंने चुनौती के रूप में न्यू-वेबबाइंडिंग cmdlet के साथ पोर्ट 80 बाइंडिंग बनाने को नहीं पाया।


1
मैंने इस उत्तर की सराहना की, लेकिन लगता है कि एक आसान मार्ग @ stackoverflow.com/questions/32390097/… है
पीटर मजीद

1
मैं मानता हूं कि AddSslCertificate कॉल नए-आइटम सिंटैक्स की तुलना में अधिक मनभावन है और मैंने इसे बदल दिया है। इस दौरान काम करने के दौरान मुझे जो निराशा हुई वह थी मुझे मिलने वाले त्रुटि संदेश और यह तथ्य कि मैं उन्हें एक Google खोज का उपयोग करके एक संकल्प से संबंधित नहीं कर सका। इसलिए, शेष शब्द भविष्य में या किसी और के लिए उस प्रक्रिया को आसान बनाने से संबंधित हैं।
प्रोफेसर वॉन लेमोन्गर्ल

4

मुझे लगता है कि आप निम्नलिखित के बाद क्या कर रहे हैं:

$bindings = @(
   @{protocol="http";bindingInformation=$ip + ":"+ $port + ":" + $hostRecord},
   @{protocol="https";bindingInformation=$ip + ":"+ $port + ":" + $hostRecord}
)

मूल रूप से आपको बाइंडिंग के एक सरणी को पास करने की आवश्यकता है। अधिक उपयोगी जानकारी यहाँ - ( http://blogs.iis.net/jeonghwan/iis-powershell-user-guide-comparing-repretative-iis-ui-tasks )

(संपादित करें: सरणी सिंटैक्स में फिक्स्ड टाइपो - एक्सट्रॉनिक कॉमा)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.