【问题标题】:Access server certificate from ASP.NET (C#)从 ASP.NET (C#) 访问服务器证书
【发布时间】:2024-01-21 21:10:01
【问题描述】:

使用服务器变量(Request.ServerVariables["CERT_SERVER_ISSUER"]),我可以得到一个字符串,代表连接中使用的服务器证书颁发者。

我想访问实际的证书(如果可能,X509Certificate),以便进一步检查证书。

我想在我的 ASP.NET 代码中验证服务器证书,以确保没有人简单地单击“..proceed Anyway”。具体来说,我想检查 CA Root。

按照我的理解——通常浏览器不会提供客户端证书——所以:

HttpContext.Current.Request.ClientCertificate

将为空/空...我正在寻找服务器证书,如果可能的话,我正在寻找服务器证书的完整链,以便我可以检查 CA 根。

【问题讨论】:

    标签: c# server certificate


    【解决方案1】:

    您可以从证书存储中获取证书,您可以根据需要通过主题名称、指纹或其他方式来获取。您需要确定其中哪些可用 - 并在此示例中更改“查找类型”:

    X509Store store = new X509Store(StoreLocation.LocalMachine);
    store.Open(OpenFlags.ReadOnly);
    
    X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectName, "Subject Name", false);
    if (certs.Count > 0)
    {
        // do something with: certs[0];
    };
    
    store.Close();
    

    【讨论】: