TFS 2015 vNext Release 的 WinRM 数据库和网站部署任务中的证书误报

Certificate False Alarm in WinRM's Database and Web Site Deployment Tasks of TFS 2015 vNext Release

我遇到错误“在机器 xx.x.xx.11 上部署失败,在配置和执行 WinRM -SQL Server DB DeploymentWinRM - IIS Web App Deployment 后显示以下消息:

System.Management.Automation.Remoting.PSRemotingTransportException: Connecting to remote server xx.x.xx.11 failed with the following error message : The server certificate on the destination computer (xx.x.xx.11:5986) has the following errors: The SSL certificate contains a common name (CN) that does not match the hostname."

我将证书名称添加到代理的主机文件中以将 xx.x.xx.11 与其相关联。它仍然无法修复。这怎么能解决?任务可以忽略 SSL 检查吗?

问题不在于主机文件或构建代理,而在于 TARGET 机器上的服务器证书。对我来说,当我遇到这个问题时,我正在使用 VSTS 部署到 Azure VM,但是 onsite 机器的解决方案也是一样的.

对于 Azure VM 部署,当您为您的 public IP 创建一个没有 DNS 名称标签 的 VM,然后稍后添加一个(某物)时,就会出现问题像 example.centralus.cloudapp.azure.com)。如果更改 DNS 名称标签,也会发生这种情况。


问题

您需要检查如何连接到计算机。对于您的情况,我们要使用 xx.x.xx.11:5986。 WinRM and/or VSTS 使用端口 5986 进行部署,因此我们要包括端口号。对我来说,VSTS 开始尝试使用 example.centralus.cloudapp.azure.com:5986 因为我最近添加了一个 DNS 名称标签。我们称其为目标机器地址

target 机器上,以管理员身份打开 PowerShell 或命令提示符,然后输入命令“winrm e winrm/config/listener”。它应该 return 两个侦听器,一个用于 HTTP,另一个用于 HTTPS(如果没有列出 HTTPS,请不要担心我们稍后会添加一个)。请特别注意 HTTPS 侦听器的 Hostname。如果这与我们之前找到的 目标机器地址 不匹配,那就是导致错误的原因。 CertificateThumbprint 对应于计算机上的服务器证书。

要查看这些证书,请从 PowerShell 或命令提示符中键入 mmc 并按回车键。转到 'File' > 'Add/Remove Snap-in...'。 Select 'Certificates',然后单击 添加 。在对话框中,select 'Computer Account' 并单击 下一步,然后单击 完成。在 'Certificates' > 'Personal' > 'Certificates' 下,您将看到 WinRM 配置正在使用的证书。这里的自签名证书被视为 测试证书,因为它们不受官方证书颁发机构的支持。我们需要创建一个代表您要使用的目标机器地址

您还可以在“服务器证书”下查看 IIS 中的证书。


解决方案

确保您知道要用于连接到计算机的地址。这是目标机器地址

target 机器上,以管理员身份打开 PowerShell。输入以下命令。

New-SelfSignedCertificate -DnsName WhateverTargetMachineAddressYouNeed -CertStoreLocation Cert:\LocalMachine\My

这会为您的目标地址创建一个新的服务器证书,有效期为一年。

接下来,我们要为 HTTPS 传输类型重新创建 WinRM 侦听器以使用新证书。打开 IIS 并查看您的 Web 服务器的 Server Certificates。您应该会看到刚刚创建的那个。右键单击它并 select 'View...'。在 Details 选项卡中,复制证书的 Thumbprint。如果您愿意,也可以从 mmc 执行此操作。

在 PowerShell 中一次输入以下命令。

winrm delete winrm/config/listener?Address=*+Transport=HTTPS

然后:

winrm create winrm/config/listener?Address=*+Transport=HTTPS '@{Hostname="WhateverTargetMachineAddressYouNeed";CertificateThumbprint="TheThumbprintYouCopied";port="5686"}'

完成!如果您在 PowerShell 中输入 winrm e winrm/config/listener,您现在应该会看到使用新证书的 HTTPS 传输。

如果您的发布定义或部署脚本中的任何内容正在使用旧地址(对我来说,Azure VM IP 地址),请务必更新它们以使用新的目标机器地址(对我来说,Azure VM DNS 名称标签)带有端口号。在 VSTS 中,确保选中使用“测试证书”的复选框。祝你好运!

想了解更多,可以到这里:

http://www.dotnetcurry.com/windows-azure/1289/configure-winrm-execute-powershell-remote-azure-with-arm