powershell 从命令行将pfx文件导入特定证书存储

eeq64g8w  于 2023-05-22  发布在  Shell
关注(0)|答案(7)|浏览(219)

使用CertUtil将证书从pfx文件导入到用户的个人存储中相对容易:

certutil –f –p [certificate_password] –importpfx C:\[certificate_path_and_name].pfx

但这最终会出现在当前用户的个人商店中。我需要它在本地机器上的TrustedPeople中。
有没有什么方法可以从命令行做到这一点,或者通过调用certutil importpfx上的不同参数,使用另一个certutil命令或不同的实用程序?PowerShell是另一种可能性,尽管我对它了解不多。
干杯,马特

b1zrtrql

b1zrtrql1#

在这里为未来的读者锚定我的发现。
将证书导入到本地计算机上的受信任根证书颁发机构:

CERTUTIL -addstore -enterprise -f -v root "somCertificat.cer"

将pfx导入到本地计算机上的Personal

CERTUTIL -f -p somePassword -importpfx "somePfx.pfx"

将pfx导入到本地计算机上的受信任人员-Link到importpfx.exe

importpfx.exe -f "somePfx.pfx" -p "somePassword" -t MACHINE -s "TRUSTEDPEOPLE"

将证书导入本地计算机上的受信任人员

Certutil -addstore -f "TRUSTEDPEOPLE" "someCertificate.cer"
oalqel3c

oalqel3c2#

对于其他寻找这个的人来说,我不能在特定的商店中使用certutil -importpfx,并且我不想下载jaspernygaard的答案提供的importpfx工具,以避免将文件复制到大量服务器的要求。我最终在一个显示为here的powershell脚本中找到了答案。
代码使用System.Security.Cryptography.X509Certificates导入证书,然后将其移动到所需的存储中:

function Import-PfxCertificate { 

    param([String]$certPath,[String]$certRootStore = "localmachine",[String]$certStore = "My",$pfxPass = $null) 
    $pfx = new-object System.Security.Cryptography.X509Certificates.X509Certificate2 

    if ($pfxPass -eq $null) 
    {
        $pfxPass = read-host "Password" -assecurestring
    } 

    $pfx.import($certPath,$pfxPass,"Exportable,PersistKeySet") 
    
    $store = new-object System.Security.Cryptography.X509Certificates.X509Store($certStore,$certRootStore) 
    $store.open("MaxAllowed") 
    $store.add($pfx) 
    $store.close() 
}
iovurdzv

iovurdzv3#

检查这些链接:http://www.orcsweb.com/blog/james/powershell-ing-on-windows-server-how-to-import-certificates-using-powershell/
进口证书:http://poshcode.org/1937
您可以执行以下操作:

dir -Path C:\Certs -Filter *.cer | Import-Certificate -CertFile $_ -StoreNames AuthRoot, Root -LocalMachine -Verbose
gpfsuwkq

gpfsuwkq4#

对于Windows 10:
将证书导入到当前用户的受信任根证书颁发机构:

certutil -f -user -p certPassword -importpfx root "example.pfx"

将证书导入到当前用户的受信任人员:

certutil -f -user -p certPassword -importpfx TrustedPeople "example.pfx"

将证书导入到本地计算机上的受信任根证书颁发机构:

certutil -f -user -p certPassword -enterprise -importpfx root "example.pfx"

将证书导入到本地计算机上的受信任人员:

certutil -f -user -p certPassword -enterprise -importpfx TrustedPeople "example.pfx"
vi4fp9gy

vi4fp9gy5#

在Windows 2012 R2(Win 8.1)及更高版本中,您还可以使用“官方”Import-PfxCertificate cmdlet
以下是代码的一些基本部分(一个可适应的示例):

Invoke-Command -ComputerName $Computer -ScriptBlock {
        param(
            [string] $CertFileName,
            [string] $CertRootStore,
            [string] $CertStore,
            [string] $X509Flags,
            $PfxPass)
        $CertPath = "$Env:SystemRoot\$CertFileName"
        $Pfx = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
        # Flags to send in are documented here: https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509keystorageflags%28v=vs.110%29.aspx
        $Pfx.Import($CertPath, $PfxPass, $X509Flags) #"Exportable,PersistKeySet")
        $Store = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Store -ArgumentList $CertStore, $CertRootStore
        $Store.Open("MaxAllowed")
        $Store.Add($Pfx)
        if ($?)
        {
            "${Env:ComputerName}: Successfully added certificate."
        }
        else
        {
            "${Env:ComputerName}: Failed to add certificate! $($Error[0].ToString() -replace '[\r\n]+', ' ')"
        }
        $Store.Close()
        Remove-Item -LiteralPath $CertPath
    } -ArgumentList $TempCertFileName, $CertRootStore, $CertStore, $X509Flags, $Password

基于mao 47的代码和一些研究,我写了一篇小文章和一个简单的cmdlet,用于将PFX证书导入/推送到远程计算机。
Here's我的文章提供了更多细节和完整的代码,也适用于PSv 2(默认在Server 2008 R2 / Windows 7上),只要您启用了SMB和管理共享访问权限。

xsuvu9jc

xsuvu9jc6#

下面是完整的代码,导入pfx,添加iis网站,添加ssl绑定:

$SiteName = "MySite"
$HostName = "localhost"
$CertificatePassword = '1234'
$SiteFolder = Join-Path -Path 'C:\inetpub\wwwroot' -ChildPath $SiteName
$certPath = 'c:\cert.pfx'

Write-Host 'Import pfx certificate' $certPath
$certRootStore = “LocalMachine”
$certStore = "My"
$pfx = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$pfx.Import($certPath,$CertificatePassword,"Exportable,PersistKeySet") 
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store($certStore,$certRootStore) 
$store.Open('ReadWrite')
$store.Add($pfx) 
$store.Close() 
$certThumbprint = $pfx.Thumbprint

Write-Host 'Add website' $SiteName
New-WebSite -Name $SiteName -PhysicalPath $SiteFolder -Force
$IISSite = "IIS:\Sites\$SiteName"
Set-ItemProperty $IISSite -name  Bindings -value @{protocol="https";bindingInformation="*:443:$HostName"}
if($applicationPool) { Set-ItemProperty $IISSite -name  ApplicationPool -value $IISApplicationPool }

Write-Host 'Bind certificate with Thumbprint' $certThumbprint
$obj = get-webconfiguration "//sites/site[@name='$SiteName']"
$binding = $obj.bindings.Collection[0]
$method = $binding.Methods["AddSslCertificate"]
$methodInstance = $method.CreateInstance()
$methodInstance.Input.SetAttributeValue("certificateHash", $certThumbprint)
$methodInstance.Input.SetAttributeValue("certificateStoreName", $certStore)
$methodInstance.Execute()
kulphzqa

kulphzqa7#

在较新版本的Windows中,Certuil有[CertificateStoreName],我们可以在其中给予商店名称。在早期版本的Windows中,这是不可能的。
安装 *.pfx证书:certutil -f -p“”-enterprise -importpfx root“”
安装 *.cer证书:certutil -addstore -enterprise -f -v root“”
下面的命令可以在windows cmd中执行。C:>certutil -importpfx -?用法:CertUtil [Options] -importPFX [CertificateStoreName] PFXFile [Modifiers]

相关问题