lox*_*lox 5 .net security web-services certificate
我想将对 .NET Web 服务的访问限制为特定的客户端列表。他们会将客户证书附加到每个请求中,并且只有在“在列表中”时才会得到正确的响应。
但如何以及在哪里实施这一点的最佳方法是?
在 IIS (7.0) 上,我可以设置需要客户端证书选项,但在哪里指定允许访问哪些客户端证书?我是否需要 Web 服务器计算机的证书存储中的客户端证书的公共部分?
或者必须在代码中处理这样的设置,在代码中我以某种方式提取客户端证书 ID 并将其与本地列表匹配?
或者其他方式?
根据您的安全要求在 IIS7 上创建 WCF 服务的一种方法如下。
\n\n为了托管 WCF 服务,您可能需要在 Web 服务器上运行以下命令:
\n\n"%windir%\\Microsoft.NET\\Framework\\v3.0\\Windows Communication Foundation\\ServiceModelReg.exe" -r \xe2\x80\x93y\nRun Code Online (Sandbox Code Playgroud)\n\n在 IIS 上,您使用 https 绑定(仅)设置站点,并在 SSL 设置下将其设置为需要 SSL 并需要客户端证书。
\n\n仅此一项就只允许使用有效的客户端证书以及 Web 服务器信任的颁发者来访问您的服务(和 wsdl)。
\n\n为了限制对特定证书的访问,您可以使用 bindingConfiguration 设置 WCF 配置文件,如下所示:
\n\n<basicHttpBinding>\n <binding name="MyBasicHttpBinding">\n <security mode="Transport">\n <transport clientCredentialType="Certificate" />\n </security>\n </binding>\n</basicHttpBinding>\nRun Code Online (Sandbox Code Playgroud)\n\n带有自定义证书验证器的行为配置如下:
\n\n<behaviors>\n <serviceBehaviors>\n <behavior name="MyServiceBehavior">\n <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />\n <serviceDebug includeExceptionDetailInFaults="false" />\n <serviceCredentials>\n <clientCertificate>\n <authentication certificateValidationMode="Custom"\n customCertificateValidatorType="<project-namespace>.ClientCertificateValidator, <project-namespace>"/>\n </clientCertificate>\n </serviceCredentials>\n </behavior>\n </serviceBehaviors>\n</behaviors>\nRun Code Online (Sandbox Code Playgroud)\n\n最后在项目的新类中实现自定义验证器,如下所示:
\n\npublic class ClientCertificateValidator : X509CertificateValidator\n{\n public override void Validate(X509Certificate2 certificate)\n {\n if (certificate.Thumbprint != <allowed-thumbprint>)\n throw new Exception();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n