"The SSL certificate contains a common name (CN) that does not match the hostname." 在 VSTS 部署中

"The SSL certificate contains a common name (CN) that does not match the hostname." in VSTS Deployment

我正在使用 VSTS 部署到 Azure VM。在我的发布定义中,我在尝试复制文件时收到以下错误:

The SSL certificate contains a common name (CN) that does not match the hostname. For more information, see the about_Remote_Troubleshooting Help topic.To fix WinRM connection related issues, select the 'Enable Copy Prerequisites' option in the task. If set already, and the target Virtual Machines are backed by a Load balancer, ensure Inbound NAT rules are configured for target port (5986). Applicable only for ARM VMs. For more info please refer to https://aka.ms/azurefilecopyreadme};]

我没有使用负载平衡器。我注意到,每当我在 Azure 门户中(在 public IP 设置中)为我的 VM 添加 DNS 名称标签时,就会出现此问题。

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

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


问题

您需要检查您是如何连接到机器的。之前,它使用 Azure VM IP 地址工作得很好。现在,VSTS 开始尝试使用 example.centralus.cloudapp.azure.com:5986,因为我最近添加了一个 DNS 名称标签。我们称其为目标机器地址

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

要查看这些证书,请从 PowerShell 或命令提示符中键入 mmc,然后按 Enter。转到 '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="5986"}'

完成! 如果您在 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