群集环境中的相互WCF证书身份验证/ SSL

时间:2010-12-23 14:20:05

标签: wcf security ssl certificate load-balancing

我阅读了很多关于WCF安全性的文章,但仍然没有关于证书方案的清晰图片。我们的部署环境有一个NLB集群(前端),很少有ASP.NET站点与应用程序服务器(后端,也称为NLB集群)通信。 我们需要使用相互证书身份验证和SSL来保护它。 我是否正确,我们需要做以下事情:

  1. 在域CA中发出CN = app-server-NLB-hostname和“Server authentication”目的的证书。
  2. 使用“客户端身份验证”目的为前端机箱颁发证书。
  3. 将后端证书的公钥导入前端节点的存储(反之亦然)。
  4. 配置WCF以将net.tpc与传输安全性一起使用
  5. 配置服务行为(serviceCredentials部分)
  6. 配置客户端端点行为(clientCredentials部分)
  7. 我的问题是:

    1. 我错过了什么吗?
    2. 我是否需要执行任何其他步骤才能启用SSL?
    3. 应该为哪个主机名前端证书颁发?
    4. 前端节点位于DMZ中,因此无法访问域(CA)。这会导致任何问题吗?

1 个答案:

答案 0 :(得分:3)

你好。由于没有其他人已经回答,我会对此采取一些措施 - 但是公平的警告 - 我是一名Java / UNIX开发人员,而你提出的一些问题是微软特有的。但这里有几个答案:

1 - 发行证书     CN = app-server-NLB-hostname和     '服务器身份验证'的目的     域CA.

目的是微软特定的。这听起来是正确的,但是 - 您可能需要定期使用“密钥用法” - 对于SSL证书,我通常使用keyEncipherment或keyAgreement。有时网站使用digitalSignature。所有这三个在RFC中都是有效的,但有时微软对于什么有用是很奇怪的。如果您使用的是Microsoft CA,我会查看它是否具有SSL证书的证书配置文件,并且只使用它。

2 - 为前端颁发证书     “客户端身份验证”框     目的

与#1相同 - 每个证书都需要某种基本密钥用法。你提到的领域是扩展的用法,这些用法可能也是必要的,但不是强制性的。

3 - 导入后端证书的公开     键入前端节点的存储     (反之亦然)。

只有这是微软特定的东西。在正确的PKI中,您应该导入签署SSL的可信CA证书,但您不必将每个端点(如后端证书)导入前端。我会尝试只配置您信任的CA链,看看是否可以让它工作 - 从长远来看,它将使您的架构更具可扩展性。

4 - 配置WCF以使用net.tpc     运输安全

5 - 配置服务行为     (serviceCredentials部分)

6 - 配置客户端端点     行为(clientCredentials部分)

听起来不错......

从那里开始,我认为你没有错过任何其他东西。关键通常是通过模糊的错误消息来处理。当SSL握手失败时,每个系统都有自己不可思议的方式来告诉错误,所以它主要是了解出了什么问题。

根据您描述的问题,我不会认为您的安全架构说您需要进行证书状态检查。这是一个附加措施,可让您的系统检查证书是否已被CA撤销。它需要相当多的基础设施才能使其工作(CRL或OCSP),所以我不会说如果没有在你的团队中进行认真的讨论,你应该转向它,关于你试图减轻的风险以及它们的可能性发生。

应该为哪个主机名前端证书颁发?

他们代表的服务器的主机名。

关于主机名的事情 - 除非您使用完全限定的域名,否则某些系统将无法正常运行。其他人则不那么挑剔。在任何情况下 - 证书的主题DN应唯一地描述它所代表的服务,应用程序或服务器。

前端节点位于DMZ中,因此无法访问域(CA)。这会导致任何问题吗?

你不会有问题。

除非 - 您需要进行上述证书状态检查。如果必须验证证书状态,则需要从端点(即DMZ)获取有关证书状态(CRL或OCSP服务器)的信息。在复杂的基础架构中,这通常是通过打开OCSP服务器的路径来完成的 - 它是对固定域名或IP的HTTP GET,因此在防火墙上打开路径通常不会太糟糕。

就像我说的那样 - 这将是高档,严肃的风险缓解型解决方案。对你的系统来说可能有些过分 - 我对你的系统知之甚少,无法告诉你它是否有保证。