在 TFS 2015 中将多个 HTTPS 站点部署到单个主机时出现问题
Trouble deploying multiple HTTPS sites to single host in TFS 2015
我正在尝试将多个网站部署到单个主机 运行ning 来自 TFS 2015 的 IIS。我正在尝试让所有网站都使用 "Server Name Indication Required" 选项,以便它们都可以 运行在同一个IP地址下。 (如果我手动设置所有内容,此设置在 IIS 中工作正常——我的问题/问题来自从 TFS 2015 部署)。
部署链中的第一个站点工作正常,但任何后续站点似乎都失败并出现以下错误:
System.Exception: SSL Certificate add failed, Error: 183 Cannot create a file when that file already exists.
我正在部署的每个站点都有不同的 SSL 证书,我已将它们全部正确导入本地 Machine\Personal 商店。
下面显示了发布定义的屏幕截图,其中突出显示了 "IIS Web App Management" 任务。
关于如何在发布定义中解决此错误的任何建议,以便我可以在没有人工干预的情况下干净地部署?
我想我可以尝试的一件事是从 PowerShell 执行所有 IIS 管理步骤,但希望更充分地使用这些工具,而不是滚动新脚本来执行它们似乎应该能够执行的操作做原生。
如有任何见解,我们将不胜感激。
如果您尝试将证书绑定到已绑定到此证书或其他证书的端口,则会出现错误消息。
您可以尝试为站点设置不同的端口。
如果不影响站点,您也可以尝试添加一个步骤(命令 line/Powershell 步骤)以在下一个部署步骤之前删除现有绑定。
例如:
$> netsh http delete sslcert ipport:1.1.1.1:443
参考以下文章删除绑定:
- How to: Configure a Port with an SSL Certificate
- Remove an SSL certificate from your server
- How to remove SSL bindings using powershell
我的工作正常 - 但我必须从 WinRM - IIS 应用程序管理任务中基本上消除绑定配置。我保持一切不变,但在这些任务中完全没有指定绑定信息,然后添加了一个目标机器电源 shell 脚本,看起来像这样(指纹和站点域已更改):
Import-Module WebAdministration
if ($null -eq (Get-WebBinding | Where-Object {$_.BindingInformation -eq "*:443:iddev.mydomain.com"}))
{
New-WebBinding -Name "Identity-B2B" -Port 443 -Protocol "https" -HostHeader "iddev.mydomain.com" -SslFlags 1
New-Item -Path "IIS:\SslBindings\!443!iddev.mydomain.com" -Thumbprint "88E811B7A9417DACAAAAAAAAAA1C36AA0BA238FF1E0F" -SSLFlags 1
}
if ($null -eq (Get-WebBinding | Where-Object {$_.BindingInformation -eq "*:443:iddev.myotherdomain.com"}))
{
New-WebBinding -Name "Identity-B2C" -Port 443 -Protocol "https" -HostHeader "iddev.myotherdomain.com" -SslFlags 1
New-Item -Path "IIS:\SslBindings\!443!iddev.myotherdomain.com" -Thumbprint "BE38195A2BBBBBBBBBBBBBBB1C2AB5762C9" -SSLFlags 1
}
我正在尝试将多个网站部署到单个主机 运行ning 来自 TFS 2015 的 IIS。我正在尝试让所有网站都使用 "Server Name Indication Required" 选项,以便它们都可以 运行在同一个IP地址下。 (如果我手动设置所有内容,此设置在 IIS 中工作正常——我的问题/问题来自从 TFS 2015 部署)。
部署链中的第一个站点工作正常,但任何后续站点似乎都失败并出现以下错误:
System.Exception: SSL Certificate add failed, Error: 183 Cannot create a file when that file already exists.
我正在部署的每个站点都有不同的 SSL 证书,我已将它们全部正确导入本地 Machine\Personal 商店。
下面显示了发布定义的屏幕截图,其中突出显示了 "IIS Web App Management" 任务。
关于如何在发布定义中解决此错误的任何建议,以便我可以在没有人工干预的情况下干净地部署?
我想我可以尝试的一件事是从 PowerShell 执行所有 IIS 管理步骤,但希望更充分地使用这些工具,而不是滚动新脚本来执行它们似乎应该能够执行的操作做原生。
如有任何见解,我们将不胜感激。
如果您尝试将证书绑定到已绑定到此证书或其他证书的端口,则会出现错误消息。
您可以尝试为站点设置不同的端口。
如果不影响站点,您也可以尝试添加一个步骤(命令 line/Powershell 步骤)以在下一个部署步骤之前删除现有绑定。
例如:
$> netsh http delete sslcert ipport:1.1.1.1:443
参考以下文章删除绑定:
- How to: Configure a Port with an SSL Certificate
- Remove an SSL certificate from your server
- How to remove SSL bindings using powershell
我的工作正常 - 但我必须从 WinRM - IIS 应用程序管理任务中基本上消除绑定配置。我保持一切不变,但在这些任务中完全没有指定绑定信息,然后添加了一个目标机器电源 shell 脚本,看起来像这样(指纹和站点域已更改):
Import-Module WebAdministration
if ($null -eq (Get-WebBinding | Where-Object {$_.BindingInformation -eq "*:443:iddev.mydomain.com"}))
{
New-WebBinding -Name "Identity-B2B" -Port 443 -Protocol "https" -HostHeader "iddev.mydomain.com" -SslFlags 1
New-Item -Path "IIS:\SslBindings\!443!iddev.mydomain.com" -Thumbprint "88E811B7A9417DACAAAAAAAAAA1C36AA0BA238FF1E0F" -SSLFlags 1
}
if ($null -eq (Get-WebBinding | Where-Object {$_.BindingInformation -eq "*:443:iddev.myotherdomain.com"}))
{
New-WebBinding -Name "Identity-B2C" -Port 443 -Protocol "https" -HostHeader "iddev.myotherdomain.com" -SslFlags 1
New-Item -Path "IIS:\SslBindings\!443!iddev.myotherdomain.com" -Thumbprint "BE38195A2BBBBBBBBBBBBBBB1C2AB5762C9" -SSLFlags 1
}