在没有私钥的情况下在Service Fabric群集中安装证书

时间:2016-06-09 17:47:25

标签: azure-service-fabric azure-resource-manager azure-keyvault

我需要在使用ARM模板创建的Service Fabric群集中安装证书。我可以使用以下helper powershell命令使用私钥安装证书:

> Invoke-AddCertToKeyVault

https://github.com/ChackDan/Service-Fabric/tree/master/Scripts/ServiceFabricRPHelpers

此证书在Azure Key Vault中后,我可以修改我的ARM模板,以便在群集中的节点上自动安装证书:

"osProfile": {
    "secrets": [
        {
            "sourceVault": {
                "id": "[parameters('vaultId')]"
            },
            "vaultCertificates": [
                {
                    "certificateStore": "My",
                    "certificateUrl": "https://mykeyvault.vault.azure.net:443/secrets/fabrikam/9d1adf93371732434"
                }
            ]          
        }
    ]
}

问题是Invoke-AddCertToKeyVault期望我提供一个pfx文件,假设我有私钥。

该脚本正在创建以下JSON blob:

$jsonBlob = @{
    data = $base64
    dataType = 'pfx'
    password = $Password
} | ConvertTo-Json

我修改了脚本以删除密码并将dataType更改为'cer'但是当我在Azure中部署模板时,它表示dataType不再有效。

如何将证书部署到不包含私钥的服务结构群集?

1 个答案:

答案 0 :(得分:3)

1)如果使用.cer或.pfx,SF并不在意。所有SF需要的是证书在VM中的本地证书库中可用。

2)您遇到的问题是CRP代理程序,它将密钥保管库中的证书安装到VM中的本地证书存储区,今天仅支持.pfx。

所以现在你有两个选择

1)创建一个没有私钥的pfx文件并使用它

以下是通过C#(或powershell)的方法 将证书加载到X509Certificate2对象中 然后使用X509ContentType = Pfx的导出方法 https://msdn.microsoft.com/en-us/library/24ww6yzk(v=vs.110).aspx

2)使用自定义VM扩展部署.cer。由于.cer只是一个公钥证书,因此不应该有隐私要求。您可以将证书上传到blob,并使用自定义脚本扩展名下载并将其安装在计算机上。