我有一个 IIS 设置为只接受带有 SSL 证书的客户端连接。我有一个在 IIS 上运行的 WCF 服务。我在服务器受信任的 CA 中有一个证书颁发机构。现在,当客户端连接到服务时,IIS 是否验证客户端证书是由我的受信任 CA 之一颁发的?还是我必须在我的 WCF 服务中进行验证?
此外,如果我希望服务仅接受来自一个特定 CA(不是我所有受信任的 CA,只有一个)的连接,我是否必须在服务代码中进行验证?
我有一个 IIS 设置为只接受带有 SSL 证书的客户端连接。我有一个在 IIS 上运行的 WCF 服务。我在服务器受信任的 CA 中有一个证书颁发机构。现在,当客户端连接到服务时,IIS 是否验证客户端证书是由我的受信任 CA 之一颁发的?还是我必须在我的 WCF 服务中进行验证?
此外,如果我希望服务仅接受来自一个特定 CA(不是我所有受信任的 CA,只有一个)的连接,我是否必须在服务代码中进行验证?
如果您将 IIS 配置为要求双向 HTTPS(带有客户端证书的 SSL),则 IIS / http.sys 负责验证证书,并且客户端证书必须位于受信任的人员存储中,或者必须由受信任的 CA 颁发。在建立 SSL 连接的安全握手期间验证证书。当 IIS 用于托管 WCF 服务时,此验证在 WCF 之外完成(如果是自托管,您可以使用自定义证书验证)。
如果您想限制对服务的访问仅限于客户端的有限子集(仅由单个 CA 颁发的证书),您应该将此要求从身份验证(验证证书)移动到 WCF 服务中的授权 =自定义 AuthorizationPolicy,您将在其中验证该证书由正确的 CA 颁发 = 客户端有权调用您的服务。
还可以使用netsh -checksslctlidentifier
和sslctlstorename
. 此配置对于整个端口(网站)都是全局的,因此如果您在同一个端口上托管了多个具有不同要求的 Web 应用程序或服务,这将不是您的选择。
是的,IIS 验证客户端证书以进行相互身份验证,您不必在 Web 服务代码中检查它。
看看这篇文章,会更清楚。