4

"자체"발급자를 사용하여 KeyVault에 자체 서명 된 인증서 을 만들려고합니다.KeyVault에서 내보낼 수있는 개인 키가있는 인증서를 생성했습니다.

$policy = New-AzureKeyVaultCertificatePolicy -SubjectName "CN=$($certificateName)" -IssuerName "Self" -ValidityInMonths 12 

$policy.Exportable = $true 

Add-AzureKeyVaultCertificate -VaultName $vaultName -Name $certificateName -CertificatePolicy $policy 

그러나 인증서를 다시 가져올 때 개인 키가없는 것 같습니다.

KeyVault에서 직접 인증서를 만드는 것은 온라인으로 다루지 않는 것으로 보입니다. 나머지는 PowerShell cmdlets의 API 문서 및 소스 코드를 살펴본 후 필자가 혼란 스럽습니다.

난 당신이 개인 키와 함께 인증서를 검색하려는 경우

답변

6

, 당신은 내보낼 수 있습니다 .. 그것은 내가 로컬 인증서를 만드는 피하기 위해 원하는대로 내가보고 싶었어요 간단한 뭔가 바라고 있어요 를 통해 디스크 (빈 암호)를 PFX 파일로 :

$vaultName = "my-vault-name" 
$certificateName = "my-cert-name" 
$pfxPath = [Environment]::GetFolderPath("Desktop") + "\$certificateName.pfx" 

$pfxSecret = Get-AzureKeyVaultSecret -VaultName $vaultName -Name $certificateName 
$pfxUnprotectedBytes = [Convert]::FromBase64String($pfxSecret.SecretValueText) 
[IO.File]::WriteAllBytes($pfxPath, $pfxUnprotectedBytes) 

것은 당신이 디스크에 작성하지 않고 메모리 만 개인 키 자체를보고 싶은 경우에, 시도 :

$vaultName = "my-vault-name" 
$certificateName = "my-cert-name" 
$pfxPath = [Environment]::GetFolderPath("Desktop") + "\$certificateName.pfx" 

$pfxSecret = Get-AzureKeyVaultSecret -VaultName $vaultName -Name $certificateName 
$pfxUnprotectedBytes = [Convert]::FromBase64String($pfxSecret.SecretValueText) 
$pfx = New-Object Security.Cryptography.X509Certificates.X509Certificate2 
$pfx.Import($pfxUnprotectedBytes, $null, [Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable) 
$pfx.PrivateKey.ExportParameters($true) 

에는 지수 및 모듈러스 외에 개인 매개 변수가 표시됩니다.

당신은 (당으로 this blog post에 지침을 "다시 암호를 추가 PFX 파일 & 검색"), 다음 시도 자신의 암호를 사용하여 디스크에 PFX 파일을 보호하려는 경우 :

$vaultName = "my-vault-name" 
$certificateName = "my-cert-name" 
$pfxPath = [Environment]::GetFolderPath("Desktop") + "\$certificateName.pfx" 
$password = "my-password" 

$pfxSecret = Get-AzureKeyVaultSecret -VaultName $vaultName -Name $certificateName 
$pfxUnprotectedBytes = [Convert]::FromBase64String($pfxSecret.SecretValueText) 
$pfx = New-Object Security.Cryptography.X509Certificates.X509Certificate2 
$pfx.Import($pfxUnprotectedBytes, $null, [Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable) 
$pfxProtectedBytes = $pfx.Export([Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $password) 
[IO.File]::WriteAllBytes($pfxPath, $pfxProtectedBytes) 

AKV (Aurex Key Vault)는 REST API 문서 herehere에서 언급했듯이 AKV 인증서, AKV 키 및 AKV 보안의 세 가지 상호 관련 리소스를 통해 지정된 X.509 인증서를 나타냅니다. 세 명 모두 동일한 이름과 동일한 버전을 공유합니다. 확인하려면 Get-AzureKeyVaultCertificate에서 Id, KeyIdSecretId 속성을 확인하십시오.

이 3 개 자원의 각

은 주어진 X.509의 인증서를 보는 다른 관점을 제공

  • AKV 인증서는 X.509 인증서의 공개 키와 인증서 메타 데이터을 제공합니다. 공개 키의 모듈 및 지수 (ne)와 기타 cert 메타 데이터 (지문, 만료일, 주체 이름 등)가 포함됩니다. PowerShell에서, 당신은을 통해이를 얻을 수 있습니다 :
(Get-AzureKeyVaultCertificate -VaultName $vaultName -Name $certificateName).Certificate 
  • AKV 키는 X.509 인증서의 개인 키 제공합니다. 해당 인증서가 내보낼 수 없음으로 표시된 경우 서명과 같은 암호화 작업을 수행하는 데 유용 할 수 있습니다.
(Get-AzureKeyVaultKey -VaultName $vaultName -Name $certificateName).Key 
  • AKV 비밀은 개인을 포함한 전체 X.509 인증서을 내보낼 할 수있는 방법을 제공합니다 : PowerShell에서, 당신은 단지를 통해이 개인 키공공 부분을 얻을 수 있습니다 키 (정책에서 개인 키 내보내기를 허용하는 경우)
(Get-AzureKeyVaultSecret -VaultName $vaultName -Name $certificateName).SecretValueText 
+1

매우 완전한 응답 덕분 아드리 : 위에서 알 수 있듯이, 현재 base64 인코딩 인증서 통해 PowerShell에서 얻을 수있다! PowerShell API가 이해하기가 쉽지 않은 것처럼 비밀을 되 찾을 필요가 있음을 깨닫기 시작했습니다. .Certificate은 함정입니다 :-) 이것은 일을 멋지게 설명하는 데 도움이되었습니다. –

관련 문제