Azure 如何检索本地服务结构群集的证书指纹?

Azure 如何检索本地服务结构群集的证书指纹?,azure,certificate,azure-service-fabric,azure-powershell,Azure,Certificate,Azure Service Fabric,Azure Powershell,我们有一个由微服务组成的应用程序,还使用各种Azure资源,如CosmosDB、Redis、EventHub 因此,我们编写了一个Powershell脚本,它从Azure资源组中检索各种机密:CosmosDB连接字符串,对于Redis和Eventhub也是如此。此外,还会从资源组中的密钥库读取SF证书指纹。然后,这些秘密存储在git工作区之外的Json文件中 然后在Scripts\Deploy-FabricApplication.ps1中,我们读取Json文件并使用机密替换占位符: $jsonF

我们有一个由微服务组成的应用程序,还使用各种Azure资源,如CosmosDB、Redis、EventHub

因此,我们编写了一个Powershell脚本,它从Azure资源组中检索各种机密:CosmosDB连接字符串,对于Redis和Eventhub也是如此。此外,还会从资源组中的密钥库读取SF证书指纹。然后,这些秘密存储在git工作区之外的Json文件中

然后在Scripts\Deploy-FabricApplication.ps1中,我们读取Json文件并使用机密替换占位符:

$jsonFile = "$rootDir\secrets.json"
$secretsHashtable = @{}
(Get-Content $jsonFile| ConvertFrom-Json).psobject.properties | Foreach { $secretsHashtable[$_.Name] = $_.Value }

$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath

$publishProfile = Read-PublishProfile $PublishProfileFile

if ($PublishProfileFile.EndsWith("Local.1Node.xml"))
{
    $secretsHashtable['Cluster-Host-Name'] = 'localhost'
    # TODO store the local SF certificate thumbprint in $secretsHashtable['SSL-Certificate-Find-Value']
    $publishProfile.CopyPackageParameters.CompressPackage = $true
    $OutFile = "$LocalFolder\..\ApplicationParameters\Local.1Node.xml"
}
else
{
    $OutFile = "$LocalFolder\..\ApplicationParameters\Cloud.xml"
}

# Replace $( ... ) in Cloud.Template.xml by the values from the hashtable
$TemplateFile = "$LocalFolder\..\ApplicationParameters\Template.xml"
$TemplateStr  = Get-Content $TemplateFile -Raw
$ReplacedStr  = [regex]::Replace($TemplateStr, '\$\(([\w-]+)\)', {
    param($match)
    $key = $match.Groups[1].Value
    $value = $secretsHashtable[$key]
    if ($value -ne $null)
    {
        return $value
    }
    else
    {
        throw "$key not found in $jsonFile"
    }
})

Set-Content -Path $OutFile -Value $ReplacedStr
这适用于使用Cloud.xml进行远程发布和调试(来自Visual Studio 2017)

但是,对于Local.1Node.xml,它失败了,因为我们的应用程序通过ServiceManifest.xml中的条目检查证书指纹

<Endpoint Protocol="https" Name="ServiceEndpoint" 
    Type="Input" Port="9950" CertificateRef="MY_CERT" />

因此,在本地发布SF应用程序失败,原因是:

我的问题是:如何检索本地Service Fabric SDK安装的证书指纹


如果我能做到这一点,我会把它放在上面的脚本中(请参阅“待办事项”注释)

我已经能够解决我的问题:

Write-Host "Retrieving thumbprint for local SF certificate... " -NoNewline
$localCert = Get-ChildItem cert:\LocalMachine\My | Where { $_.Subject -eq 'CN=AzureServiceFabric-AnonymousClient'}
Write-Host "ok"

现在我可以在Visual Studio中进行本地和远程调试(在Azure中部署的SF上)。

我想提供帮助,但我有点困惑。如果您使用的是Azure SF,您应该在KeyVault中拥有证书,对吗?如果是这种情况,则在运行部署之前,您的应用程序或用户应有权访问KeyVault以检索证书。本地服务结构不要求您拥有证书,因此您可以运行测试部署以进行测试等。嗨,Oleh,我认为对于本地SF,使用了一些证书。由于它们没有嵌入到my Cloud.xml中,我们的应用程序失败了。我还没有在源代码中找到它发生的地方(指纹验证),一位同事不久前给我看了它。远程执行还可以,证书的单位是KV,安装在远程SF,正如您所写。我想我使用标准部署工具,但我必须编辑脚本\Deploy-FabricApplication.ps1(与VS2017、Azure工具一起提供),以嵌入CosmosDB、Redis、,Cloud.xml和Local.1Node.xml中的Eventhub连接字符串几天前我在本地机器上安装了一个新的SF副本,本地部署没有问题。这就是为什么我对此感到困惑。那么您正在连接到本地群集it,请求证书吗?通过web或SF explorer?我认为在SF部署文件中设置应用程序参数不是一个好主意。您应该为此使用单独的文件,如Setting.xml