使用 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
捆绑在一起,但在这样做之后我可以 运行 验证。
为了使用客户端证书在内部验证应用程序,我使用 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
捆绑在一起,但在这样做之后我可以 运行 验证。