我正在开发一个需要基于证书的双向https身份验证的.net项目,即客户端需要将请求与自己的证书相关联,而https服务器可以根据证书对客户端进行身份验证。我找出了粗略的工作流程,但不确定这是否是正确的方法:
在客户端:
HttpWebRequest request =(HttpWebRequest)WebRequest.Create(“一个请求uri”);在服务器端:
// cert是来自certStore的X509Certificate2实例或证书文件
request.ClientCertificates.Add(CERT); ;
// req是HttpListenerRequest实例
if(req.ClientCertificateError == 0)
{
X509Certificate2 clientCert = req.GetClientCertificate;
//验证客户证书
}
我的问题是:
1)这是正确的方法吗?
2)在服务器端,一旦获得与请求关联的客户端证书,它将如何验证证书?假设我们可以在服务器上安装相同的客户端证书。
我是安全人员的新手。真的很感激,如果有人可以帮助解决问题或指出我有用的文件。
答案 0 :(得分:1)
答案取决于您如何颁发客户端证书。昨天我描述了procedure of validation in another question。该过程非常复杂,但根据客户端证书的颁发方式,您可以简化它。
我认为您不希望访问者购买证书只是登录到您的服务器。这意味着您需要自己为客户颁发证书。如果您颁发这些证书,您只需将它们放到数据库中,当客户端连接时,检查您的clientCert是否在数据库中。
请注意,除了证书本身之外,您还希望在数据库中保留吊销信息,以便让用户知道,如果证书不再有效,会发生什么。
证书生成程序是一个非常复杂的主题。我建议您在继续之前阅读一些关于PKI的书籍。以下是我推荐的好书: