最终用户通信的所有服务织物群集节点上导入客户证书(含链)

问题描述:

我有我的所有服务织物的群集节点,需要进口我的合作伙伴的X509客户端证书(有完整的链条一起)使我可以验证每个传入请求并根据客户端证书对每个合作伙伴进行身份验证。这意味着,当我导入客户端证书,我想在相关的中间证书(即签署的客户端证书)和相关的根证书(即签署的中间证书)被自动安装到适当的证书存储如“中间体证书颁发机构”和“受信任的根证书颁发机构'在本地机器商店中。最终用户通信的所有服务织物群集节点上导入客户证书(含链)

我希望整个链存储在证书存储区适当位置的原因是我打算使用我的服务身份验证管道组件中的System.Security.Cryptography.X509Certificates命名空间中的X509Chain验证传入的客户端证书。 X509Chain似乎依赖于“受信任的根证书颁发机构”存储来完成根证书验证。

有大量的信息,关于如何确保)节点到节点,和b)管理客户集群通信像这样:https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cluster-security。然而,关于保护服务(托管在服务结构集群中)与使用客户端证书的最终用户使用者之间的通信信息并不多。如果我错过了这些信息,请告诉我。

我没有很多的合作伙伴客户端证书的配置。合作伙伴的数量在可控范围内。此外,每次有新的合作伙伴客户端证书添加时,我都无法重新创建群集。

  1. 我需要做杠杆 /ServiceManifest/CodePackage/SetupEntryPoint元素 SerivceManifest.xml文件,并编写自定义代码导入合作伙伴 证书(存储在关键库或其他地方)?这种方法有哪些优点 和缺点?
  2. 或有任何其他简单的方法来导入满足所有的我的要求的合作伙伴证书吗?如果 那么请详细说明如何实现这一步骤。

更新: 我尝试添加的客户端证书作为下osProfile部在上述link描述的所提出的方法。这看起来非常简单。

为了能够做到这一点,我首先需要将相关证书(作为秘密)推送到相关密钥保管库中,如link所述。在这篇文章中,描述(章节“格式化证书Azure的资源提供者使用”)如何把它作为重点金库的秘密之前证书信息成JSON格式来格式化。这JSON有以下格式上传PFX文件的字节:

{ 
    "dataType": "pfx", 
    "data": "base64-encoded-cert-bytes-go-here", 
    "password": "pfx-password" 
} 

但是因为我处理的客户端证书的公共部分,我不与PFX文件,但只的base64 CER文件在Windows处理(这显然是一样的pem文件)。证书的公开部分没有密码。所以我改变了JSON格式到以下几点:

{ 
    "dataType": "pem", 
    "data": "base64-encoded-cert-bytes-go-here" 
} 

当我调用新AzureRmResourceGroupDeployment与下osProfile部分适当修改相关的ARM模板,我收到以下错误:

New-AzureRmResourceGroupDeployment : 11:08:11 PM - Resource Microsoft.Compute/virtualMachineScaleSets 'nt1vm' failed with message '{ 
    "status": "Failed", 
    "error": { 
    "code": "ResourceDeploymentFailure", 
    "message": "The resource operation completed with terminal provisioning state 'Failed'.", 
    "details": [ 
     { 
     "code": "CertificateImproperlyFormatted", 
     "message": "The secret's JSON representation retrieved from 
https://xxxx.vault.azure.net/secrets/ClientCert/ba6855f9866644ccb4c436bb2b7675d3 has data type pem which is not 
an accepted certificate type." 
     } 
    ] 
    } 
}' 

我也尝试使用'cer'数据类型如下所示:

{ 
    "dataType": "cer", 
    "data": "base64-encoded-cert-bytes-go-here" 
} 

这也导致了相同的错误。

我在做什么错?

我会考虑在所有节点上导入证书here。 (第5步)您可以使用引用Azure密钥保管库的ARM模板在指定的商店中添加多个证书。使用耐用性级别Silver/Gold,以在重新部署期间保持群集运行。

请注意受信任商店中的adding证书。 如果证书是由受信任的CA创建的,则不需要将 任何内容都放入受信任的根权威机构存储中(因为它们已经存在)。

使用X509Certificate2验证客户端证书。 Verify,除非每个客户都有自己的服务实例进行通信。

+0

1)我的确了解将证书放置在可信商店的危险。 2)如果通过ARM添加证书,当集群功能正常时需要添加一个证书时会发生什么情况? – Raghu

+0

这就是银色/金色级别,你的vmss节点会按顺序重新启动 – LoekD

+0

LoekD:你能否看看我的问题的更新部分? – Raghu