클라이언트 인증서로 내부적으로 응용 프로그램을 인증하려면 makecert
응용 프로그램을 사용하여 루트 인증서와 클라이언트 인증서를 만들었습니다.makecert를 사용하여 인증서 해지 목록 (CRL)을 만든 다음 pvk2pfx를 사용하여 .pfx로 묶습니다.
모든 것이 잘 작동하지만, 나는 다음과 같은 오류를 얻을 X509Certificate2 Verify
방법을 사용하는 경우 :
The revocation function was unable to check revocation for the certificate
X509Certificate2 cert = actionContext.Request.GetClientCertificate();
cert.Verify();
을 나는 X509Chain
을 만들어이 문제를 가져온 다음 RevocationMode = X509RevocationMode.NoCheck
에 X509ChainPolicy
을 설정할 수 있습니다.
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());
}
}
그러나이 문제에 관심이 있습니다. 거기에 Certificate Revocation List (CRL)
을 makecert
으로 만든 다음 X509Certificate2 Verify
에 허용되는 pvk2pfx
과 함께 .pfx로 묶을 수 있습니까?
'makecert'는 더 이상 사용되지 않습니다. https://msdn.microsoft.com/en-us/library/windows/desktop/aa386968(v=vs.85).aspx. 'X509Certificate2.Verify()'에만 의존하기를 원한다면, 응용 프로그램이 전 세계적으로 유효한 인증서를 받아 들일 것이기 때문에 잘못하고있다. – Crypt32
@ Crypt32 입력 해 주셔서 감사합니다. 인증서가 루트 CA에서 발급되었는지 확인하는 별도의 방법이 있습니다. 확인은 유효한 인증서를 보내는 첫 번째 확인 일뿐입니다. – Ogglas
'X509Certificate2.Verify '는 프레임 워크에서 가장 무의미한 메소드 중 하나입니다. 'true'를 리턴하면 문맥에서 유효한지 알아 내기 위해 아마했던 것과 동일한 체인을 만들어야 할 것입니다. 'false'를 반환하면 체인을 스스로 구축하여 "거짓"이 당신에게 적합한 지 아닌지 판단 할 수 있습니다. 체인 객체를 수동으로 생성하는 것이 좋습니다. – bartonjs