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

标签 ssl tfs winrm azure-pipelines-release-pipeline

我正在使用 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 名称标签时,就会出现此问题。

最佳答案

问题不在于主机文件或构建代理,而在于 上的服务器证书。目标 机器。对我来说,我使用 VSTS 部署到 Azure 虚拟机 当我遇到问题时, 的解决方案仍然相同现场机器也是如此。

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

问题

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

目标机器,以管理员身份打开 PowerShell 或命令提示符,然后输入命令 'winrm e winrm/config/listener '。它应该返回两个监听器,一个用于 HTTP 另一个是 HTTPS (如果没有为 HTTPS 列出一个,别担心,我们稍后会添加一个)。特别注意主机名 对于 HTTPS 监听器。如果这与 不匹配目标机器地址我们之前发现,这就是导致错误的原因。 证书指纹 对应于机器上的服务器证书。

要查看这些证书,请从 PowerShell 或命令提示符中键入 mmc然后按回车。转到"file">“添加/删除管理单元...”。选择“证书”,然后单击 添加 .在对话框中,选择“计算机帐户”并单击 下一个 然后 完成 .在“证书”>“个人”>“证书”下,您将看到 WinRM 配置正在使用的证书。此处自签名的证书被视为 测试证书 因为它们没有得到官方证书颁发机构的支持。我们需要创建一个代表 目标机器地址你想用。

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

解决方案

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

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

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

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

接下来,我们要为 HTTPS 传输类型重新创建 WinRM 监听器以使用新证书。打开 IIS 并查看 服务器证书 为您的网络服务器。你应该看到你刚刚创建的那个。右键单击它并选择“查看...”。在 详情 选项卡,复制 指纹 为证书。如果您愿意,也可以从 mmc 执行此操作。

在 PowerShell 中一次输入以下命令。
winrm delete winrm/config/listener?Address=*+Transport=HTTPS

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

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

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

有关更多信息,您可以访问此处:

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

关于ssl - VSTS 部署中的 "The SSL certificate contains a common name (CN) that does not match the hostname.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42538540/

相关文章:

powershell - 尝试连接到目标计算机时 VSTS AzureFileCopy 权限被拒绝

c# - HTTP Get请求错误 "Authentication failed because the remote party has closed the transport stream."

linux - 如何从 .key 文件中提取公钥和私钥?

c# - .tfignore 不是忽略文件

c# - 使用 PowerShell 中的 WinRM 连接到远程服务器失败

windows - 无法远程运行 powershell 脚本,导致 Azure 中的测试代理部署失败

ios - 带有自签名 SSL 的 RESTful 服务

android - 将自签名 SSL 证书添加到 HttpURLConnection

c# - Team Foundation Server 2013 update 4 不构建 .net 4.6.1 应用程序

tfs - 如何在 TFS 中查询历史记录?