2011-04-10 62 views
2

相互认证,客户端需要请求以自己的证书和HTTPS服务器可以验证关联基于证书的客户端。我想通了,粗糙的工作流程,但不知道这是否是做的正确方法:正道HTTPS根据我的需要基于证书,即双向HTTPS验证的.NET项目工作证

在客户端:

        HttpWebRequest的要求=(HttpWebRequest的)WebRequest.Create(“请求URI” );
        //证书是从一个的CertStore X509Certificate2实例或证书文件
        request.ClientCertificates.Add(CERT); ;
在服务器端:
        // REQ是HttpListenerRequest实例
       如果(req.ClientCertificateError == 0)
        {
                X509Certificate2 clientCert = req.GetCli entCertificate;
                //验证客户端证书
       }

我的问题是:

1)这是这样做的正确方法?

2)在服务器端,一旦获得与请求关联的客户端证书,它将如何验证证书?假设我们可以在服务器上安装相同的客户端证书。

我是新来的安全的东西。真的很感激,如果任何人可以帮助解决这些问题或指向我有用的文件。

回答

1

答案取决于您如何颁发客户端证书。昨天我描述了procedure of validation in another question。这个过程相当复杂,但根据客户端证书的颁发方式,您可以简化它。

我不认为你会希望你的访客购买证书,只需登录到您的服务器。这意味着您需要为自己的客户颁发证书。而如果你发出这些证书,你可以简单地把他们的数据库,当客户端连接,请检查您clientCert是在数据库中。

注意的是,除了证书本身要保持在DB撤销信息,以便让用户知道,如果它发生了什么事与他们的证书不再有效。

证书生成过程是一个相当复杂的话题。我建议你在继续之前阅读一些关于PKI的书。这里是伟大的书籍,我建议:

  1. Rsa Security's Official Guide to Cryptography
  2. PKI: Implementing & Managing E-Security
+0

感谢您的回答。是的,我会向客户颁发证书。你能否更详细地解释验证部分?假设客户端证书已经安装在服务器的证书存储区中,我该如何比较请求中的证书和本地商店中的证书?通过比较指纹...不? – gigimei 2011-04-11 03:35:43

+0

@ gigimei我不知道是否需要在本地商店安装客户端证书,但我想必须有其他方式。原因在于阅读(或在内部搜索)成千上万的证书需要相当长的时间。至于验证本身 - 您肯定需要通过检查证书的签名来验证完整性。然后你可以比较“拇指印”。 – 2011-04-11 04:57:28