如何从RESTFul请求捕获客户端证书并在c#中验证服务器上的证书?

问题描述 投票:0回答:1

过去两周我一直在研究这个话题,我发现了很多信息,我不知所措。我将从头开始。我是一个新手,就像以前从未做过任何证书。我创建了RESTful web api来捕获邮递员的请求。在请求中,我发送了一个CERT(my-cert.cer)。我想使用API​​控制器从请求中捕获CERT并验证服务器上的内容。甚至可以按照我的方式捕获CERT吗?我没有在任何地方找到一个好的工作示例。请帮忙!

这是我的GET方法

public class clientController : ApiController
{
    public string Get(int id)
    {
        X509Certificate2 cert = Request.GetClientCertificate();
        X509Certificate2 cert2 = RequestContext.ClientCertificate;

        logger.addLine(LogLineType.Message, "CERT " + cert + "\n", "page", null);
        logger.addLine(LogLineType.Message, "CERT 2" + cert2 + "\n", "page", null);
        System.Console.WriteLine("cert : " + cert);
        System.Console.WriteLine("cert2 : " + cert2);

        GetClient getClient = new GetClient();
        string response = getClient.RetrieveClientRequest(id).ToString();
        return response; } }
c# ssl x509certificate2 asp.net-apicontroller
1个回答
0
投票

根据MSDN

var cert = Request.GetClientCertificate();

将获得与请求一起发送的证书。 为了验证您现在有两个选择。

1)使用OCSP验证 2)打电话

cert.Verify(); 

使用证书库中的证书在本地验证它的链。这意味着,它会在本地证书存储区中查找证书,或者查找用于构建证书信任链的其他证书。

整个主题非常广泛。如果您的证书是由某个权威机构签署的,那么就有一个链条。标志b,b标志c和c标志你的证书(d)。通常,您拥有一个证书颁发机构(CA),用于签署用户/计算机的证书请求。此CA的证书(大写通常为a或b)将部署到同一公司的所有计算机上。

使用Verify(),您可以查找证书本身,无论机器是否知道它。如果没有,你上链,并且尽快,因为你有一个用于签署,你信任整个树。

d由c => d签名未知,但有c的签名。 c也不知道,但签名告诉我们,那是由b签署的。 b然后安装在您机器的可信证书中,因此是已知的。所以你信任b,这让你信任c,因此信任d。

当然,这没有告诉你撤销。我不确定,如果.Verify()将检查撤销列表。最好使用OCSP,如果有的话。

© www.soinside.com 2019 - 2024. All rights reserved.