|
Param(
|
|
[parameter(Mandatory=$true)][string]$vaultName,
|
|
[parameter(Mandatory=$true)][string]$certName,
|
|
[parameter(Mandatory=$true)][string]$certPwd,
|
|
[parameter(Mandatory=$true)][string]$subjectName,
|
|
[parameter(Mandatory=$false)][string]$ValidityInMonths=12,
|
|
[parameter(Mandatory=$true)][string]$saveDir
|
|
)
|
|
|
|
|
|
#Log in Azure Account
|
|
Login-AzureRmAccount
|
|
|
|
|
|
# Create Cert in KeyVault
|
|
Write-Host "Creating certificate in Azure KeyVault..." -ForegroundColor Yellow
|
|
$policy = New-AzureKeyVaultCertificatePolicy -SubjectName $subjectName -IssuerName Self -ValidityInMonths $ValidityInMonths
|
|
Add-AzureKeyVaultCertificate -VaultName $vaultName -Name $certName -CertificatePolicy $policy
|
|
|
|
# Downloading Certificate
|
|
Write-Host "Downloading Certificate from KeyVault..." -ForegroundColor Yellow
|
|
|
|
$Stoploop = $false
|
|
$Retrycount = 0
|
|
|
|
do {
|
|
try {
|
|
|
|
$kvSecret = Get-AzureKeyVaultSecret -VaultName $vaultName -Name $certName -ErrorAction SilentlyContinue
|
|
$kvSecretBytes = [System.Convert]::FromBase64String($kvSecret.SecretValueText)
|
|
$certCollection = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection
|
|
$certCollection.Import($kvSecretBytes,$null,[System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
|
|
$protectedCertificateBytes = $certCollection.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $certPwd)
|
|
[System.IO.File]::WriteAllBytes($saveDir + "\" + $certName + ".pfx", $protectedCertificateBytes)
|
|
|
|
$Stoploop = $true
|
|
Write-Host "Finished!" -ForegroundColor Yellow
|
|
}
|
|
catch {
|
|
if ($Retrycount -gt 5){
|
|
$Stoploop = $true
|
|
Write-Host "Not possible to retrieve the certificate!" -ForegroundColor Yellow
|
|
}
|
|
else {
|
|
Start-Sleep -Seconds 20
|
|
$Retrycount = $Retrycount + 1
|
|
}
|
|
}
|
|
}
|
|
While ($Stoploop -eq $false)
|
|
|
|
# Show Certificate Values
|
|
Get-AzureKeyVaultCertificate -VaultName $vaultName -Name $certName
|