39

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

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

但这最终会出现在当前用户的个人商店中。我在 LocalMachine 上的 TrustedPeople 中需要它。

有什么方法可以从命令行执行此操作,或者通过在 certutil importpfx 上调用不同的参数,使用另一个 certutil 命令或不同的实用程序?Powershell 是另一种可能性,虽然我对此了解不多。

干杯,马特

4

7 回答 7

69

在这里为未来的读者锚定我的发现。

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

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

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

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

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

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

将证书导入本地计算机上的 Trusted People

Certutil -addstore -f "TRUSTEDPEOPLE" "someCertificate.cer"
于 2011-08-31T16:31:23.773 回答
9

对于寻找这个的其他人,我无法certutil -importpfx在特定商店中使用,并且我不想下载 jaspernygaard 的答案提供的 importpfx 工具,以避免将文件复制到大量服务器的要求. 我最终在此处显示的 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() 
}
于 2014-01-20T21:09:26.697 回答
6

检查这些链接: 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
于 2011-03-02T17:38:51.043 回答
4

对于 Windows 10:

将证书导入当前用户的受信任的根证书颁发机构:

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

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

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

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

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

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

certutil -f -user -p oracle -enterprise -importpfx TrustedPeople "example.pfx"
于 2017-06-22T03:23:24.637 回答
3

对于 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

基于 mao47 的代码和一些研究,我写了一篇小文章和一个简单的 cmdlet,用于将 PFX 证书导入/推送到远程计算机。

这是我的文章,其中包含更多详细信息和完整代码,也适用于 PSv2(Server 2008 R2 / Windows 7 上的默认设置),只要您启用了 SMB 和管理共享访问权限。

于 2015-12-31T08:09:17.173 回答
1

下面是完整代码,导入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()
于 2016-01-13T19:18:23.780 回答
0

在较新版本的 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]

于 2019-01-25T12:00:04.267 回答