Hey! Jag har nu lyckats ta ut certificat från root/local machine med hjälp av X509Store. Det konstiga är att jag har 250 certifikat när jag tittar i internetexplorer under Trusted root certificates (inkl det specefika certet) men när X509store hämtar certen så säger den 248 och självklart saknas det specefika certet? Förmodligen finns ditt certifikat installerat under current user.Installerat root Certifikat verkar inte vara tillräckligt?
Jag har installerat ett root certifikat på min dator(WindowsXP), när min applikation(som körs i en IIS) försöker kommunicera med en webservice som kräver detta root certifikat så får jag SSL fel?
Jag har provat bygga följande klass :
public class CetificateHandler : System.Net.ICetificatePolicy
{
public CertificateHandler() {}
public bool CheckValidationResult(ServicePoint sp, X509Certificate cert, WebRequest req, int problem)
{
return true;
}
}
Vilket jag instansierar innan jag anropar webservicen, och detta fuyngerar perfekt.
Men jag vill gärna ha lite säkerhet,
1. Varför räcker det inte med att installera root certifikatet?
2. Finns det något vis att kontrollera i min CheckValidationResult metod vilke certifikat som finns i trusted root och jämföra detta med det inkommande certifikatet? och isåfall hur?
MVH
JSv: Installerat root Certifikat verkar inte vara tillräckligt?
Någon ide på varför det är på detta vis?
koden jag använder ser ut på följande vis :
public bool CheckValidationResult(ServicePoint sp, X509Certificate cert, WebRequest req, int problem)
{
X509Certificate2 cert2;
try
{
X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly | OpenFlags.IncludeArchived);
for (int i = 0; i < store.Certificates.Count;i++ )
{
cert2 = store.Certificates[i];
if (cert2.IssuerName.Name == cert.Issuer)
{
return true;
}
}
return false;
}
catch (Exception ex)
{
throw ex;
}
}
Sv:Installerat root Certifikat verkar inte vara tillräckligt?
För att se vart ditt certifikat finns så gå in i mmc-konsolen:
Startmeny -> run -> mmc.
I mmc-konsolen:
File -> Add/Remove snap-in -> Add -> Certificates -> Välj konto -> .. -> Ok.
Du kan lägga till alla konton så får du en bra översikt.
Leta upp certifikatet, dubbelklicka och välj details tabben. Här kan du se detaljer som t.ex serienummer.
Du bör kunna få fram ditt certifikat med följande kod:
// .My Eller .Root och .CurrentUser eller .LocalMachine beroende på vart certifikatet finns
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection col = store.Certificates.Find( X509FindType.FindBySerialNumber, "0011223344", true);
// 0011223344 = certifikatets serienummer utan space
X509Certificate2 cert = col[0];