2012-04-11 13 views
2

Ich benutze eine Smartcard, um den Benutzer zu authentifizieren. Ich habe einen Authentifizierungsdienst (SecurityTokenService), der die Authentifizierungslogik auf dem Server behandelt.Benötigen wir immer ein Stammzertifikat, das auf der Maschine installiert ist?

Ich verwende X509Certificate2.Verify(), um das Zertifikat zu validieren. Da diese API überprüfen kann, ob das Zertifikat gültig/widerrufen ist, indem Sie online gehen und die Zertifizierungsstelle kontaktieren, benötige ich ein Stammzertifikat auf dem Server?

Können wir vermeiden, ein Stammzertifikat auf unserem lokalen Computer zu haben? Oder Root-Zertifikat ist immer obligatorisch?

Antwort

5

habe ich versucht, ein paar Dinge und sind hier die Beobachtungen:

  1. Vor allem X509Certificate2.Verify() prüft nicht, ob alle Zertifikate in der Kette widerrufen werden. Von this Post kam ich zu wissen, dass Verify-Methode verwendet intern Crypt32 CertVerifyCertificateChainPolicy Funktion. Die Dokumentation dafür besagt, dass es keine Zertifikatsperrüberprüfung durchführt. Kurz gesagt, die Verify-Methode überprüft nur, ob das Zertifikat, für das es aufgerufen wurde, widerrufen wurde oder nicht.

  2. In Bezug auf Stammzertifikat:

    • Wenn Sie mit X509Certificate2.Verify() und root cert nicht vorhanden ist, dann wird das Verfahren outrightly false zurückzukehren. Also mit dieser Methode ist Root-Zertifikat unbedingt erforderlich.
    • Wenn Sie X509Chain verwenden, um die Vertrauenskette zu erstellen, können Sie whether to exclude root certificate revocation oder go online/offline to verify revocation status der Zertifikate entscheiden.
    • Unabhängig davon, ob Sie online gehen oder nicht, oder Sie Stammzertifikat ausschließen oder nicht, erhalten Sie den PartialChain Wert in ChainStatus, wenn das Stammzertifikat fehlt. Um die vollständige Vertrauenskette zu erstellen, benötigen Sie ein Stammzertifikat auf Ihrem Computer.

Hope this jemand hilft, die ein wenig mehr über die Zertifikatüberprüfung in C# wissen will.

+0

Seltsame Antwort CSharpLearner: In den meisten Fällen müssen Sie nicht explizit auf ein * root * -Zertifikat überprüfen, was Sie brauchen, ist eine Kette, die * explizit vertrauenswürdig ist *. Normalerweise vertrauen Sie nur Rootzertifikaten auf einem System, aber Sie können stattdessen auch jedem Zwischenzertifikat oder Endbenutzerzertifikat vertrauen. Das bedeutet nicht, dass diese Antwort für dieses spezielle Framework * falsch ist, aber es gilt sicherlich nicht für andere Frameworks ... –

+0

@owlstead: Danke für deinen Kommentar; es ist hilfreich. Was ich geschrieben habe, ist meine Beobachtung nach ein paar Versuchen. Wenn das gültige Root-Zertifikat auf Ihrem Rechner vorhanden ist, erhalten Sie eine absolut korrekte Validierung ohne Nachrichten/Status wie 'PartialChain'. Nachdem dies gesagt wurde, ob jemand die gesamte Kette (einschließlich Stammzertifikat) validieren möchte oder nicht, ist eine Frage der Anforderung und der Wahl. Nur aus Neugier: Was, wenn das Root-Zertifikat selbst widerrufen wird? Oder ist es etwas, das unmöglich ist? Wenn nein, sollten wir nicht auch root cert validieren? – Learner

+0

Normalerweise widerrufen Sie nur Zertifikate mit der Seriennummer; Selbstsignierte (Root-) Zertifikate werden normalerweise "Out-of-Band" behandelt - dazu gehört auch das Entziehen des Zertifikats. In einer guten CA-Struktur wird der private Schlüssel des Stammzertifikats nur hin und wieder verwendet, um neue CAs zu erstellen und für diese hin und wieder eine CRL zu erstellen. irgendwo. Die Wahrscheinlichkeit, dass es kompromittiert wird, sollte also ziemlich gering sein. –