Convert-CertBase64DataToFile.ps1
function Convert-CertBase64DataToFile { <# .SYNOPSIS Converts the Base64 string representation of a certificate to a Certificate object and optionally saves the certificate to disk .PARAMETER CertBase64Data Base64 String certificate representation .PARAMETER OutputFile Full path to the certificate to save to disk .PARAMETER Password Password to protect the private key certificate (.pfx) .EXAMPLE Convert-CertBase64DataToFile -CertBase64Data (Get-AzKeyVaultSecret myCertificateSecret).SecretValueText -OutputFile C:\LocalTemp\myCertificateSecret.pfx -Password (Read-Host -AsSecureString p) p: ************* #> param( [parameter(Mandatory, Position = 0, ValueFromPipeline)] ## Base64String representation of the certificate object [Alias('Data')] [string]$CertBase64Data, [parameter(Position = 1)] ## Full file path where to save the converted certificate [string]$OutputFile, [parameter(Position = 2)] ## password to use to save a Private Key file [securestring]$Password ) process { [byte[]]$certData = [System.Convert]::FromBase64String($CertBase64Data) $certObject = [System.Security.Cryptography.X509Certificates.X509Certificate2] $certData if (! [string]::IsNullOrWhiteSpace($OutputFile)) { if (! [string]::IsNullOrWhiteSpace($Password)) { if (! $certObject.HasPrivateKey) { Write-Warning "Saving a .cer file in .pfx format with password may result in a corrupted file" } $certCollection = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection $certCollection.Import($certData, $null, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable) [System.IO.File]::WriteAllBytes($OutputFile, $certCollection.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $Password)) } else { [System.IO.File]::WriteAllBytes($OutputFile, $certObject.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Cert)) } } else { $certObject } } } |