如何为到 Windows 10 的远程桌面 (RDP) 连接提供经过验证的服务器证书

gog*_*oud 19 remote-desktop windows-7 certificate ssl-certificate windows-10

我们办公室有一台 Windows 10 Pro 机器,它有一个开放的互联网端口,用于传入远程桌面连接(“主机”)。它受到复杂密码和有限次数的允许尝试以及仅 TLS 1.1 或更高版本的良好保护,但它不提供外部验证的 SSL 证书,仅提供远程桌面服务提供的自生成自签名证书,并且此给我们带来了两个问题:

  1. 当远程连接时,我们不能完全确信我们确实连接到这台机器,而不是一些被劫持的连接。
  2. 我们的站点未通过 PCI-DSS 3.1 合规性检查(需要,因为我们在那里使用通过互联网连接的销售点借记卡/信用卡机器)。该检查报告此面向 Internet 的远程桌面端口上的致命错误:“SSL 自签名证书”和“带有错误主机名的 SSL 证书”。

如何让作为服务器/主机的 Windows 10 Pro(或 Windows 7 / 8 / 8.1 Pro)机器提供正确的 SSL 证书以进行远程桌面验证?

gog*_*oud 22

您可以将此主机设置为使用并呈现您的(现有)外部验证 SSL 证书,因此(说明可能也适用于 Windows 8 和 8.1,可能适用于 Windows 7,也可能不适用于 Windows 7)(部分内容基于Microsoft KB 2001849 ):

首先,您需要有一个真正的经过验证的 ssl 证书,无论是您购买的还是从 LetsEncrypt 等免费的。

如果您拥有 pkcs12 格式文件(例如 pfx 扩展名)的此证书,则可以使用 Linux 或 Cygwin 查看 SHA1 指纹(您将在下面需要它):

openssl pkcs12 -in mysite.pfx -nodes|openssl x509 -noout -fingerprint
Run Code Online (Sandbox Code Playgroud)

或者,如果您在 Linux 服务器中的 /etc/ssl(/etc/ssl/certs/mysite.crt、/etc/ssl/mysite.ca-bundle 和 /etc/ssl/private/mysite.key ) 您可以创建 pfx 文件并因此获取 SHA1 指纹:

  1. 如果您还没有证书,请为您的证书创建 pfx 文件(此处:mysite.pfx)– 在请求时设置一个好的密码:

    sudo openssl pkcs12  -export -out mysite.pfx -inkey /etc/ssl/private/mysite.pem -in /etc/ssl/certs/mysite.crt -certfile /etc/ssl/mysite.ca-bundle
    
    Run Code Online (Sandbox Code Playgroud)
  2. 根据需要移动或复制此 pfx 文件,以便您的 Windows 主机可以访问它。

  3. 查看密钥的 SHA1 指纹(您将在下面需要它):

openssl x509 -in /etc/ssl/certs/mysite.crt -noout -fingerprint

将 pkcs12 格式(例如 pfx)文件导入 Windows 主机的个人证书存储:

  1. 开始 > 运行 > mmc
  2. 文件 > 添加删除管理单元 > 证书 > 添加 > 计算机帐户 > 本地计算机 > 确定
  3. 在左侧窗口中右键单击 Certificates (Local Computer)Personal,选择 All Tasks/Import...
  4. 找到 pfx 文件并将其导入,出于安全原因,我建议您不要将其设置为可导出。
  5. 展开您的个人/证书,您现在应该看到 3 个证书,其中之一是您的站点证书(例如 mysite.com)。右键单击此站点证书并右键单击,选择所有任务/管理私钥...
  6. 添加仅具有读取权限(非完全控制)的用户“网络服务”,然后应用
  7. 关闭 mmc

使用 regedit 在 中添加一个名为 SSLCertificateSHA1Hash 的新二进制值HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp。它需要的值是上面得到的证书的SHA1指纹:在新值上右击,选择修改,然后依次输入十六进制代码(不带冒号、空格或逗号,字母不区分大小写)——有总共 20 个十六进制对(40 个字符)。

您可能需要重新启动主机,或重新启动远程桌面服务(来自 Services.msc)才能工作。

现在,在使用正确的站点名称(例如 mysite.com)与该主机建立远程桌面连接后,您应该会在顶部连接栏的左侧看到一个锁定的挂锁:单击它会显示远程的身份电脑已验证。从 Internet 到此主机打开的端口现在应该通过 PCI-DSS 3.1 主机名测试。

  • 我想给你点赞几千次。 100%有效 (2认同)
  • 由于上述序列复杂且冗长,我创建了一个简单的 PowerShell 脚本来完成相同的任务。它可以在 https://github.com/HQJaTu/RDP-cert-tools 上找到。 (2认同)

Pet*_*orf 16

以下是我使用的基本步骤:

获取主机的有效证书(它不必来自外部 CA,但您的所有机器都必须信任它)。确保它具有正确的主机名,我在使用通配符证书时遇到了问题。

在主机上安装证书,如:

certutil.exe -p myPassword -importPFX c:\mycert.pfx noExport
Run Code Online (Sandbox Code Playgroud)

在 UI 或 PowerShell 中找到证书的指纹:

$tp = (ls Cert:\LocalMachine\my | WHERE {$_.Subject -match "something unique in your certs subject field" } | Select -First 1).Thumbprint
Run Code Online (Sandbox Code Playgroud)

现在告诉远程桌面使用该证书:

& wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="$tp" 
Run Code Online (Sandbox Code Playgroud)

无需重启