16

我有一个 IIS 设置为只接受带有 SSL 证书的客户端连接。我有一个在 IIS 上运行的 WCF 服务。我在服务器受信任的 CA 中有一个证书颁发机构。现在,当客户端连接到服务时,IIS 是否验证客户端证书是由我的受信任 CA 之一颁发的?还是我必须在我的 WCF 服务中进行验证?

此外,如果我希望服务接受来自一个特定 CA(不是我所有受信任的 CA,只有一个)的连接,我是否必须在服务代码中进行验证?

4

2 回答 2

17

如果您将 IIS 配置为要求双向 HTTPS(带有客户端证书的 SSL),则 IIS / http.sys 负责验证证书,并且客户端证书必须位于受信任的人员存储中,或者必须由受信任的 CA 颁发。在建立 SSL 连接的安全握手期间验证证书。当 IIS 用于托管 WCF 服务时,此验证在 WCF 之外完成(如果是自托管,您可以使用自定义证书验证)。

如果您想限制对服务的访问仅限于客户端的有限子集(仅由单个 CA 颁发的证书),您应该将此要求从身份验证(验证证书)移动到 WCF 服务中的授权 =自定义 AuthorizationPolicy,您将在其中验证该证书由正确的 CA 颁发 = 客户端有权调用您的服务。

还可以使用netsh -checksslctlidentifiersslctlstorename. 此配置对于整个端口(网站)都是全局的,因此如果您在同一个端口上托管了多个具有不同要求的 Web 应用程序或服务,这将不是您的选择。

于 2011-11-29T13:35:33.863 回答
4

是的,IIS 验证客户端证书以进行相互身份验证,您不必在 Web 服务代码中检查它。
看看这篇文章,会更清楚。

于 2011-11-29T13:24:54.703 回答