PowerShellを使用してIISサイトにバインドを追加する


19

PowerShellを使用して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

New-WebBindingを使用できます:http ://technet.microsoft.com/en-us/library/ee790567.aspx

例えば

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

これは理論的には質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供することが望ましいでしょう
マークヘンダーソン

テクネットの記事の一番下よりも良い例が思い浮かぶと思いますか?
MatthewP

15
いいえ、ただし、おそらく関連するtechnetの記事の一部を引用ブロックでここに再現する必要があります。十分なものを編集しました。
マークヘンダーソン

これを有効にするにはIISを再起動する必要がありますか?
クルーナル

10

サイトにhttpsバインディングを追加しようとするプロセスを行ったところ、かなり苦痛になる可能性があります。各ステップを達成する方法はたくさんあり、それぞれに落とし穴があります。私は、誰かがそれが役に立つと思うことを望んで、最終的な解決策を残しています。

このソリューションは、IISがインストールされ、Webサイトが定義されていることを前提としています。この投稿の目的のために、サイト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

それで十分であればいいと思います。そして場合によってはそうかもしれません。ただし、私にとっては、これにより、秘密キーに適切にアクセスできずに証明書が残りました。これにより、バインドに証明書を追加しようとしたときに、「指定されたログオンセッションが存在しません。既に終了している可能性があります」というエラーが発生しました。したがって、次のステップは秘密鍵のACLを修正することです。

$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

これにより、ローカルシステムが秘密キーを含むフォルダーから継承されていない場合、秘密キーへのフルアクセスが許可されます。

既にインストールされている証明書を取得する場合は、そのハッシュが必要であり、次のようにGet-Itemで取得できます。

$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(キーセットが存在しない)で失敗したことが示されました。また、SYSTEMが秘密キーにアクセスできなかったために失敗しました。

httpsバインディングを作成するにはこれで十分でした。httpバインディングは、New-WebSiteコマンドレットを使用した副産物でした。無料で提供されていない場合、New-WebBindingコマンドレットを使用してポート80バインディングを作成するのは困難でした。


1
私はこの答えに感謝しましたが、@ stackoverflow.com / questions / 32390097 /…の方が簡単なルートがあるようです。
ピーターMajeed

1
AddSslCertificate呼び出しはnew-item構文よりも楽しいことに同意し、置き換えました。これを処理するときに私が抱えていた不満は、私が受け取ったエラーメッセージと、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-representative-iis-ui-tasks

(編集:配列構文の誤字を修正-余分なコンマ)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.