programing

PowerShell 암호 PFX 파일로 인증서 지문 가져오기

muds 2023. 9. 8. 21:46
반응형

PowerShell 암호 PFX 파일로 인증서 지문 가져오기

다음 코드를 사용하여 암호로 보호된 pfx 파일의 지문을 가져오려고 합니다.

function Get-CertificateThumbprint {
    # 
    # This will return a certificate thumbprint, null if the file isn't found or throw an exception.
    #

    param (
        [parameter(Mandatory = $true)][string] $CertificatePath,
        [parameter(Mandatory = $false)][string] $CertificatePassword
    )

    try {
        if (!(Test-Path $CertificatePath)) {
            return $null;
        }

        if ($CertificatePassword) {
            $sSecStrPassword = ConvertTo-SecureString -String $CertificatePassword -Force –AsPlainText
        }

        $certificateObject = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
        $certificateObject.Import($CertificatePath, $sSecStrPassword);

        return $certificateObject.Thumbprint
    } catch [Exception] {
        # 
        # Catch accounts already added.
        throw $_;
    }
}

실행하면 다음과 같은 오류가 발생합니다.

Cannot find an overload for "Import" and the argument count: "2".
At C:\temp\test.ps1:36 char:9
+         $certificateObject.Import($CertificatePath, $sSecStrPassword);
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest

누가 제가 이것을 해결하는 것을 도와주실 수 있습니까?

다들 감사합니다. :-)

이 SuperUser 응답에 따라 PS 3.0에서는 Get-PfxCertificate 명령을 사용하여 다음 작업을 수행합니다.

 Get-PfxCertificate -FilePath Certificate.pfx 

당신은 이걸 할 수 있다.

$certificateObject = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$certificateObject.Import($CertificatePath, $sSecStrPassword, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::DefaultKeySet)
return $certificateObject.Thumbprint

$CertificatePath와 $sSecStrPassword라는 두 변수를 설정해야 합니다.

업데이트됨:

$certificateObject = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($CertificatePath, $sSecStrPassword)

PowerShell 오류 메시지가 맞습니다.두 개의 매개 변수를 사용하는 오버로드는 없습니다.사용 중인 매개 변수를 기준으로 했을 때, 세 번째 매개 변수인 열거형이 필요한 오버로드를 원하는 것 같습니다.X509KeyStorageFlags예.

$certificateObject.Import($CertificatePath, $sSecStrPassword, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::DefaultKeySet)

Windows PowerShell 5.1에서 파일을 가져오지 않고 파일의 인증서 지문을 읽는 데 사용한 내용은 다음과 같습니다.

$Thumbprint = (Get-PfxData -Password $MyPFXCertificatePwdSecureString -FilePath $CertificateFilePath).EndEntityCertificates.Thumbprint

Get-PfxData에 대한 자세한 정보는 https://learn.microsoft.com/en-us/powershell/module/pkiclient/get-pfxdata 에서 확인할 수 있습니다.

참고로 Get-PfxCertificate는 powershell 6.0에서 암호를 전달하는 기능을 추가할 것으로 보입니다.

https://github.com/PowerShell/PowerShell-Docs/issues/2150

이 답변 덕분에:인증서 지문을 추출하는 명령줄 유틸리티가 있습니까?저는 다음과 같은 훌륭한 기능을 갖춘 원라이너를 고안해 낼 수 있었습니다.

    $thumbprint = (certutil -split -dump .\cert.pfx | findstr /c:"Cert Hash(sha1)").Substring(17)[-1]

PFX가 비밀번호 보호를 받고 있다면,

    $thumbprint = (certutil -split -p the_secret_password_to_my_pfx -dump .\cert.pfx | findstr /c:"Cert Hash(sha1)").Substring(17)[-1]

기술적으로, 그것은 특정한 유용성을 불러일으키기 때문에 순수한 파워셸이 아닙니다.예, 하지만 그건 모든 윈도우 시스템에 있어야 하기 때문에 작동합니다.

powershell에서 경로 오류가 발생하면 아래 스크립트를 사용합니다.

$FilePath = "c:\a\"
$FileName = "mycert"
$FileType = ".pfx"
$certificateObject = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$certificateObject.Import($FilePath+$FileName+$FileType, $sSecStrPassword, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::DefaultKeySet)
return $certificateObject.Thumbprint

언급URL : https://stackoverflow.com/questions/26877356/powershell-get-certificate-thumbprint-with-password-pfx-file

반응형