VSTS部署中出现“SSL证书包含的通用名称(CN)与主机名不匹配”的问题。

15
我正在使用VSTS部署到Azure虚拟机。在我的发布定义中,当尝试复制文件时,我收到以下错误信息:
SSL证书包含一个与主机名不匹配的通用名称(CN)。有关更多信息,请参见about_Remote_Troubleshooting帮助主题。若要解决WinRM连接相关问题,请在任务中选择“启用复制先决条件”选项。如果已设置,并且目标虚拟机由负载均衡器支持,请确保为目标端口(5986)配置了入站NAT规则。仅适用于ARM VM。有关更多信息,请参见https://aka.ms/azurefilecopyreadme
我没有使用负载均衡器。我注意到只要在Azure门户中为我的VM添加DNS名称标签(在公共IP设置中),就会出现此问题。
1个回答

40

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

对于Azure VM部署,如果您创建了一个没有公共IP的DNS名称标签的VM,然后稍后添加一个(例如example.centralus.cloudapp.azure.com),则会出现此问题。如果更改DNS名称标签,则也可能发生此问题。


问题

您需要检查如何连接到机器。之前,使用Azure VM IP地址可以正常工作。现在,由于我最近添加了DNS名称标签,VSTS开始尝试使用example.centralus.cloudapp.azure.com:5986。我们称之为目标机器地址

目标机器上,以管理员身份打开PowerShell或命令提示符,并输入命令'winrm e winrm/config/listener'。它应该返回两个侦听器,一个用于HTTP,另一个用于HTTPS(如果未列出HTTPS,则不必担心,稍后我们将添加一个)。特别注意HTTPS侦听器的主机名。如果这与我们之前找到的目标机器地址不匹配,则会导致错误。 CertificateThumbprint对应于机器上的服务器证书。

要查看这些证书,请从PowerShell或命令提示符中键入mmc并按Enter。转到“文件”>“添加/删除快捷方式...”。选择“证书”,然后单击添加。在对话框中,选择“计算机帐户”,然后单击下一步完成。在“证书”>“个人”>“证书”下,您将看到WinRM配置正在使用的证书。这里的自签名证书被认为是测试证书,因为它们没有由正式证书颁发机构支持。我们需要创建一个表示您要使用的目标机器地址的证书。

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


解决方案

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

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

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

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

接下来,我们想要重新创建WinRM侦听器,以使用新证书的HTTPS传输类型。打开IIS并查看您的Web服务器的服务器证书。您应该可以看到刚刚创建的证书。右键单击它并选择“查看...”。在详细信息选项卡中,复制证书的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


在尝试连接到部署机器时遇到了类似的问题:使用https主机名而不是IP地址对我有帮助。非常感谢! - Tybs
非常感谢您的详细解释!对于我的问题完美地解决了。 - RMD
1
永远不会太晚 - Rahul
在Windows Server 2012上是否可以延长证书的过期日期? - Ian Warburton
New-SelfSignedCertificate 命令中有一个参数可以让你添加:-NotAfter (Get-Date).AddMonths(6)(以六个月为例)。 - srbrills
对于其他人在创建监听器时遇到“错误:命令行使用无效。键入“winrm -?”获取帮助。”的情况,请删除配置(Server 2019)周围的单引号。 - PhatBuck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接