我目前正在尝试使用here提供的说明来部署Service Fabric群集。我已经成功地使用Let's Encrypt创建了证书,并且能够成功处理所有指令,除了获取certificateIssuerThumbprint值(如this link顶部的参数文件中所指示的那样)。
在“证书管理器”中查看证书详细信息,我看不到提供该值的字段。我通读了“加密”的Chain of Trust页,希望在该页上找到这样的值,但我没有看到它。
我将如何查找此证书颁发者的指纹值是什么?
谢谢!
答案 0 :(得分:2)
$secret = Get-AzKeyVaultSecret -VaultName $vault -SecretName $secretName -Version $version
$certBytes = [Convert]::FromBase64String($secret.SecretValueText)
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($certBytes, $null, 'Exportable')
$certChain = [System.Security.Cryptography.X509Certificates.X509Chain]::new()
$certChain.Build($cert)
$certificateIssuerThumbprint = ($certChain.ChainElements.Certificate | Where-Object {$_.Subject -eq $cert.Issuer}).Thumbprint
答案 1 :(得分:0)
使用您提供的链接中的脚本将值上传到Keyvault后,您应该能够看到该值
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser -Force
$SubscriptionId = "<subscription ID>"
# Sign in to your Azure account and select your subscription
Login-AzAccount -SubscriptionId $SubscriptionId
$region = "southcentralus"
$KeyVaultResourceGroupName = "mykeyvaultgroup"
$VaultName = "mykeyvault"
$certFilename = "C:\users\sfuser\myclustercert.pfx"
$certname = "myclustercert"
$Password = "P@ssw0rd!123"
# Create new Resource Group
New-AzResourceGroup -Name $KeyVaultResourceGroupName -Location $region
# Create the new key vault
$newKeyVault = New-AzKeyVault -VaultName $VaultName -ResourceGroupName $KeyVaultResourceGroupName -Location $region -EnabledForDeployment
$resourceId = $newKeyVault.ResourceId
# Add the certificate to the key vault.
$PasswordSec = ConvertTo-SecureString -String $Password -AsPlainText -Force
$KVSecret = Import-AzureKeyVaultCertificate -VaultName $vaultName -Name $certName -FilePath $certFilename -Password $PasswordSec
$CertificateThumbprint = $KVSecret.Thumbprint
$CertificateURL = $KVSecret.SecretId
$SourceVault = $resourceId
$CommName = $KVSecret.Certificate.SubjectName.Name
Write-Host "CertificateThumbprint :" $CertificateThumbprint
Write-Host "CertificateURL :" $CertificateURL
Write-Host "SourceVault :" $SourceVault
Write-Host "Common Name :" $CommName
答案 2 :(得分:0)
我离证书专家还很远,但是我认为这是需要做的:
答案 3 :(得分:0)
如果证书位于 Azure Key Vault 中,@mperian 的回答绝对是正确的。
就我而言,证书安装在各种机器上的商店中。基于他们出色的回答,这里是 Powershell,可以在不使用 Azure Key Vault 的情况下在本地执行相同操作。
$thumbprint = ""
$store = "My"
$cert = Get-ChildItem -Path "Cert:\LocalMachine\$store" | Where-Object {$_.Thumbprint -match $thumbprint}
$certChain = [System.Security.Cryptography.X509Certificates.X509Chain]::new()
$certChain.Build($cert)
$certIssuerThumbprint = ($certChain.ChainElements.Certificate | Where-Object {$_.Subject -eq $cert.Issuer}).Thumbprint
答案 4 :(得分:-1)
来自Create an SF cluster using certificates declared by CN:
”注意
“ certificateIssuerThumbprint”字段允许使用给定的主题通用名称指定预期的证书发行者。该字段接受以逗号分隔的SHA1指纹的枚举。请注意,这是对证书验证的加强-在未指定颁发者或为空的情况下,如果可以构建证书的链,则该证书将被接受进行身份验证,并且最终位于验证者信任的根中。如果指定了颁发者,则如果其直接颁发者的指纹与该字段中指定的任何值匹配,则证书将被接受-不管根是否受信任。请注意,PKI可能会使用不同的证书颁发机构来颁发同一主题的证书,因此指定给定主题的所有预期颁发者指纹非常重要。
指定发行人为最佳做法;尽管省略了它仍将继续工作-对于将证书链接到受信任的根-这种行为是有局限性的,并且可能在不久的将来被淘汰。还要注意,如果PKI的证书策略是Azure部署的,并且由私有PKI颁发并由主题声明的X509证书保护的群集可能无法通过Azure Service Fabric服务进行验证(用于群集到服务的通信)。无法发现,可用和访问。”
请注意,在续订(或重新键入密钥)证书后,发行方可能会进行更改。 PKI通常会在认证实践声明(CPS)中发布其所有有效发行者(here是LetsEncrypt的-不幸的是,它似乎没有列出发行者证书。)
如果您是Microsoft内部人员,则可能会知道使用哪个API来检索授权的发行方;如果不是,请与您选择的PKI联系以获得指导。