在远程服务器上使用 PowerShell 安装证书

Posted

技术标签:

【中文标题】在远程服务器上使用 PowerShell 安装证书【英文标题】:Install certificate with PowerShell on remote server 【发布时间】:2014-02-12 05:58:37 【问题描述】:

我想在远程服务器上安装使用 makecert.exe 创建的证书 (X.509)。我无法使用 psexec 或类似的东西,但必须使用 PowerShell。

服务器操作系统:Windows Server 2008 R2 PowerShell 版本:4

问题:如何在远程服务器上使用 PowerShell 安装证书。

【问题讨论】:

远程服务器上的操作系统和 PSH 版本是什么? 我已将信息添加到原始问题中。 您是否在两台机器上都启用了 PowerShell 远程处理并且两台机器相互信任”? 【参考方案1】:

场景:ServerA 有 SSL 证书,ServerB 想要导入 SSL 证书

    定义两个变量(仅限ServerB):

    $afMachineName = "SomeMachineNameOrIp"
    $certSaveLocation = "c:\temp\Cert.CER"
    

    在两台机器(ServerA 和 ServerB)上启用信任:

    Function enableRemotePS() 
        Enable-PSRemoting -Force
        Set-Item wsman:\localhost\client\trustedhosts $afMachineName -Force
        Restart-Service WinRM
    
    

    保存证书(仅限ServerB):

    Function saveCert([string]$machineName,[string]$certSaveLocation) 
        Invoke-Command -ComputerName $machineName -ArgumentList $certSaveLocation -ScriptBlock 
            param($certSaveLocation)
            $cert = dir Cert:\LocalMachine\Root | where $_.Subject -eq "CN=YOURCERTNAME" ;
            $certBytes = $cert.Export("cert");
            [system.IO.file]::WriteAllBytes($certSaveLocation, $certBytes);
        
    
        Copy-Item -Path \\$machineName\c$\temp\CertAF.CER -Destination $certSaveLocation
    
    

    导入证书(仅限ServerB)

    Function importCert([string]$certSaveLocation) 
        $CertToImport = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $certSaveLocation
    
        $CertStoreScope = "LocalMachine"
        $CertStoreName = "Root"
        $CertStore = New-Object System.Security.Cryptography.X509Certificates.X509Store $CertStoreName, $CertStoreScope
    
        # Import The Targeted Certificate Into The Specified Cert Store Name Of The Specified Cert Store Scope
        $CertStore.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
        $CertStore.Add($CertToImport)
        $CertStore.Close()
    
    

【讨论】:

【参考方案2】:

要导入 PFX 文件,您可以使用 Import-PfxCertificate,例如

Import-PfxCertificate -FilePath YOUR_PFX_FILE.pfx -Password (ConvertTo-SecureString -String "THE_PFX_PASSWORD" -AsPlainText -Force)

要在远程计算机上执行此操作,您可以使用 Invoke-Command -ComputerName(并为 PFX 文件使用 UNC 路径)。

【讨论】:

以上是关于在远程服务器上使用 PowerShell 安装证书的主要内容,如果未能解决你的问题,请参考以下文章

使用“1”参数调用“发送”的异常:“根据验证过程,远程证书无效。PowerShell

使用PowerShell更新 Lync/Skype边缘服务器内网证书

使用Powershell访问远程Oracle数据库

如何使用Powershell远程管理Linux服务器

根据验证程序,远程证书无效

使用 PowerShell 远程更改 Windows 产品密钥