使用 makecert 创建证书吊销列表 (CRL),然后使用 pvk2pfx 将其捆绑到 .pfx

Create a Certificate Revocation List (CRL) with makecert and then bundle it to a .pfx with pvk2pfx

为了使用客户端证书在内部验证应用程序,我使用 makecert 应用程序创建了根证书和客户端证书。

一切正常,但是当我使用 X509Certificate2 Verify 方法时,出现以下错误:

The revocation function was unable to check revocation for the certificate

X509Certificate2 cert = actionContext.Request.GetClientCertificate();
cert.Verify();

我可以通过创建 X509Chain 然后将 X509ChainPolicy 设置为 RevocationMode = X509RevocationMode.NoCheck 来解决这个问题。

X509Certificate2 cert = actionContext.Request.GetClientCertificate();

if (cert == null)
{
    actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized)
    {
        ReasonPhrase = "Client Certificate Required"
    };
}
else
{
    X509Chain chain = new X509Chain();

    //Needed because the error "The revocation function was unable to check revocation for the certificate" will happen otherwise
    chain.ChainPolicy = new X509ChainPolicy()
    {
        RevocationMode = X509RevocationMode.NoCheck,
    };
    try
    {
        var chainBuilt = chain.Build(cert);
        Debug.WriteLine(string.Format("Chain building status: {0}", chainBuilt));

        if (chainBuilt == false)
        {
            actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized)
            {
                ReasonPhrase = "Client Certificate not valid"
            };
            foreach (X509ChainStatus chainStatus in chain.ChainStatus)
            {
                Debug.WriteLine(string.Format("Chain error: {0} {1}", chainStatus.Status, chainStatus.StatusInformation));
            }
        }
    }
    catch (Exception e)
    {
        Debug.WriteLine(e.ToString());
    }
}

但这让我感兴趣。有什么方法可以让我用 makecert 创建一个 Certificate Revocation List (CRL),然后将它捆绑到一个 pvk2pfx 的 .pfx 中,X509Certificate2 Verify?

可以接受吗?

在msdn上找到了解决方案。

https://msdn.microsoft.com/en-us/library/ff648732.aspx

创建根证书后运行以下命令:

makecert -crl -n "CN=RootCATest" -r -sv RootCATest.pvk RootCATest.crl

在服务器和客户端机器上安装 CRL 文件。使用 MMC 在受信任的根证书颁发机构存储中的客户端和服务器计算机上安装 RootCATes.crl。

MMC -> 文件 -> 添加或删除管理单元 -> 证书 -> 我的用户帐户

受信任的根证书颁发机构 -> 证书 -> 右键单击​​ -> 所有任务 -> 导入 -> RootCATest.crl

我没有设法将它与 pvk2pfx 捆绑在一起,但在这样做之后我可以 运行 验证。