명령줄에서 특정 인증서 저장소로 pfx 파일 가져오기
인증서를 pfx 파일에서 사용자의 개인 저장소로 가져오는 것은 CertUtil:
certutil –f –p [certificate_password] –importpfx C:\[certificate_path_and_name].pfx
그러나 이 작업은 현재 사용자의 개인 저장소로 끝납니다.로컬 머신의 신뢰할 수 있는 사람들에게 필요합니다.
certutil importpfx에 대해 다른 인수를 호출하거나 다른 certutil 명령 또는 다른 유틸리티를 사용하여 명령줄에서 이 작업을 수행할 수 있는 방법이 있습니까?파워셸은 또 다른 가능성입니다. 저는 잘 모르지만요.
건배, 매트
미래의 독자들을 위해 제 연구 결과를 여기에 고정시키는 것입니다.
로컬 시스템의 신뢰할 수 있는 루트 인증 기관으로 인증서 가져오기:
CERTUTIL -addstore -enterprise -f -v root "somCertificat.cer"
로컬 시스템에서 pfx를 Personal로 가져오기
CERTUTIL -f -p somePassword -importpfx "somePfx.pfx"
로컬 컴퓨터의 신뢰할 수 있는 사용자에게 pfx 가져오기 - pfx.exe 가져오기 링크
importpfx.exe -f "somePfx.pfx" -p "somePassword" -t MACHINE -s "TRUSTEDPEOPLE"
로컬 컴퓨터에서 신뢰할 수 있는 사용자에게 인증서 가져오기
Certutil -addstore -f "TRUSTEDPEOPLE" "someCertificate.cer"
이것을 찾는 다른 사람들에게, 나는 사용할 수 없었습니다.certutil -importpfx
특정 스토어에 파일을 대량의 서버에 복사할 필요를 피하기 위해 jaspernygaard의 답변에서 제공하는 importpfx 도구를 다운로드하고 싶지 않았습니다.저는 결국 여기에 나와 있는 파워셸 스크립트에서 제 답을 찾았습니다.
코드는 다음을 사용합니다.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()
}
다음 링크를 확인하십시오. 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
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"
윈도우즈 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의 코드와 몇 가지 연구를 바탕으로, 저는 PFX 인증서를 원격 컴퓨터로 가져오거나 푸시하기 위한 간단한 cmdlet과 간단한 기사를 작성했습니다.
다음은 SMB가 활성화되어 있고 관리 공유 액세스 권한이 있는 경우 PSv2(Server 2008 R2/Windows 7의 기본값)에서도 작동하는 자세한 내용과 전체 코드에 대한 제 기사입니다.
다음은 전체 코드입니다. 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()
최신 버전의 창에서 Certuil에는 스토어 이름을 지정할 수 있는 [CertificateStoreName]이 있습니다.이전 버전의 창에서는 이 작업을 수행할 수 없었습니다.
*.pfx 인증서 설치 중: certutil -f -p " " -enterprise -importpfx root "
*.cer 인증서 설치 중: certutil -addstore -enterprise -f -v root "
아래의 자세한 내용은 윈도우즈 cmd에서 명령을 실행할 수 있습니다.C:>certutil -importpfx -? 용도: CertUtil [옵션] -importPFX [CertificateStoreName] PFX 파일 [수정자]
언급URL : https://stackoverflow.com/questions/5171117/import-pfx-file-into-particular-certificate-store-from-command-line
'programing' 카테고리의 다른 글
활동 제목이 아닌 시작 프로그램에 대해 다른 레이블을 설정하는 방법은 무엇입니까? (0) | 2023.08.30 |
---|---|
Enable-PSRemoting 후 원격 파워셸 세션을 생성할 수 없음 (0) | 2023.08.30 |
PHP mysqli 인터페이스를 사용하여 MariaDB에 저장 프로시저를 호출하는 가장 좋은 방법은 무엇입니까? (0) | 2023.08.30 |
포트 3306에서 MySQL을 시작할 수 없음 (0) | 2023.08.30 |
실행 파일이 컴파일된 플랫폼을 확인하려면 어떻게 해야 합니까? (0) | 2023.08.30 |