ssl - 如何启用 WinRM HTTPS 传输?

标签 ssl powershell-2.0 powershell-remoting

我知道服务器需要自签名 CA。但是如何生成 CA,以及将其放在哪里才能使服务器的 PowerShell 2.0 正常工作?什么是CN匹配?

以下是我运行命令 winrm Quickconfig -transport:https 时发生的情况:

WinRM already is set up to receive requests on this machine.
WSManFault
Message
    ProviderFault
        WSManFault
            Message

Error number:  -2144108267 0x80338115
Cannot create a WinRM listener on HTTPS because this machine does not 
have an appropriate certificate. To be used for SSL, a certificate 
must have a CN matching the hostname, be appropriate for 
Server Authentication, and not be expired, revoked, or self-signed.

最佳答案

除非您想不厌其烦地建立一个成熟的 single-tiertwo-tier PKI 基础设施(这将是 ServerFault 而不是 StackOverflow 的主题),您可以使用 makecert.exe 来凑合。创建自签名 CA 证书和用它签名的主机证书。

像这样创建 CA 证书:

& makecert.exe -pe -r `
    -n "CN=TestCA" `
    -ss my `
    -sr LocalMachine `
    -a sha256 `
    -sky signature `
    "TestCA.cer"

然后为主机创建证书:

$cn = if ($env:USERDNSDOMAIN) {
        "$env:COMPUTERNAME.$env:USERDNSDOMAIN"
      } else {
        $env:COMPUTERNAME
      }

& makecert.exe -pe `
    -n "CN=$cn" `
    -ss my `
    -sr LocalMachine `
    -a sha256 `
    -sky exchange `
    -eku 1.3.6.1.5.5.7.3.1 `
    -in "TestCA" `
    -is my `
    -ir LocalMachine `
    -sp "Microsoft RSA SChannel Cryptographic Provider" `
    -sy 12 `
    "$cn.cer"

CN(通用名称)是您的证书的主题,对于主机证书,必须与计算机的 FQDN 匹配。

如果您想为本地计算机以外的其他主机创建主机证书,您需要设置 $cn另一台计算机的名称/FQDN。获取目标计算机的证书和私钥export均来自您的证书存储( <serial> 是证书的序列号):

& certutil.exe -exportPFX -f -privatekey -p "password" "<serial>" computer.pfx

复制computer.pfx到您为其生成证书的计算机并将其导入,如下所示:

& certutil.exe -importPFX -f -privatekey C:\path\to\computer.pfx

导出证书时系统会提示您输入指定的密码。

在所有应使用 TestCA 签名的证书的计算机上,您需要导入 TestCA.cer在计算机帐户的受信任的根证书颁发机构下。

& certutil.exe -f -addstore ca C:\path\to\TestCA.cer

请注意 makecert.exe 不再提供单独下载,但您可以从 Windows SDK 获取它(下载 ISO 镜像并从子文件夹 \setup\WinSDKTools 运行 SDK 工具安装程序)。

另请注意,强烈不鼓励在任何类型的生产环境中使用这样的临时 CA。

关于ssl - 如何启用 WinRM HTTPS 传输?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35079889/

相关文章:

powershell - 如何在PowerShell中查看 “alternatives”的属性?

powershell - Get-Process 到远程计算机不起作用,但 Invoke-Command 可以

java - 如何使用 Retrofit 2.0 绕过 android SSL 证书检查

powershell - 执行完成后删除 self 文件夹

powershell - 在 Powershell 中创建 Outlook 规则时出错

powershell - 如何在 PowerShell 中远程执行 ELEVATED 远程脚本

powershell - 在powershell中在远程计算机上注册环境变量

php - 如果 CURLOPT_SSL_VERIFYPEER 为假,数据传输是否不再安全?

java - 如何在 JRE8u60 中重新激活 TLS1.0

windows - 如何使用OpenSSL/Curl检查双面安全的https连接