Wie Sie überprüfen, wenn ein X509-Zertifikat ist "Extended Validation" eingeschaltet?
Ich bin kämpfen, um zu finden, eine zuverlässige Möglichkeit zu überprüfen, aus meinem C# (.Net 4.0) - Anwendung, wenn ein X509Certificate - (oder X509Certificate2) hat die "Extended Validation" (EV) - flag gesetzt ist. Kennt jemand die beste Methode?
- Willst du einfach nur prüfen, ob das cert soll ein EV-cert, oder Sie wollen auch, um die eigentliche extended validation?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man überprüfen, ob die
X509Certificate
enthält eine dieser OIds. Zusätzlich können Sie überprüfen, Chrom-Quelle für eine Liste der implementierten OIds. Sie finden die Quelle hier. Wenn Sie möchten, zu bleiben, Firefox, können Sie sich die Umsetzung hier.Ich nun aktualisiert, meine Quelle und es getestet. Ich habe eine schriftliche kleine Methode zum validieren einer
X509Certificate2
gegen die OId-Liste aus der Wikipedia/Chrom. Bei dieser Methode bin ich mit der Wikipedia-Liste, könnte es besser sein, nehmen Sie die Chrom-Liste statt.Wie ist der OId gespeichert?
Jeder
CA
hat einen oder mehrere ObjectIdsOId
s. Sie sind nicht gespeichert, wie eine Erweiterung, wie Sie vielleicht erraten, sind Sie gespeichert, wie ein Eintrag in der Policy-Erweiterungen. Um die genaue Ausdehnung ist es empfehlenswert, verwenden Sie die Oid desPolicy Extension
sich dann eher mit einem Freundlichen Namen. Die OId des Policy-Erweiterungen ist2.5.29.32
.Extrahieren der Informationen
Um die inneren Inhalte des Policy-Erweiterungen, die wir benutzen können
System.Security.Cryptography.AsnEncodedData
konvertieren es in eine lesbarestring
. Die Zeichenkette enthält, die Politik, die wir brauchen, um ein match gegen unserestring[]
zu gewährleisten, wenn es enthält die OIds einesEV Certificate
.Quelle
Wenn Sie einige Quelle für die ersten Schritte:
Wenn jemand weiß, einen besseren Weg, um dieses Ziel zu erreichen, lassen Sie es uns bitte wissen.
CertificatePolicy
. Ich Teste derzeit mit CAPI erhalten Sie eine Liste dieser Maßnahmen, aber ich bin nicht in der Lage, Zugriff auf diese Liste. Wäre dies die Lösung.Ich dachte, ich würde post, der eine vollständige Antwort, obwohl diese Frage schon Recht alt ist. Ich werde nicht piggy-back off der vorhandenen Antwort so, dass diese abgeschlossen ist.
Einem EV-Zertifikat hat ein paar Schecks, die brauchen, um passieren, um für einen browser zu berücksichtigen, dass das Zertifikat ist EV.
Let ' s sezieren jedes dieser.
Policy Identifier
Zertifikat hat eine Erweiterung namens policy-IDS. Erweiterungen aus zugegriffen werden kann
X509Certificate2.Extensions
Eigenschaft. Die policy-identifier-extension hat eine Objekt-Id ("OID") von2.5.29.32
. Damit können wir die raw-Erweiterung mit so etwas wie dieses:Wenn diese null zurückgibt, bedeutet, dass es gar keine Richtlinien, können Sie rechts von der Fledermaus übernehmen, dies ist nicht ein EV-Zertifikat.
Wahrscheinlicher, obwohl das Zertifikat hat eine Art von Politik. In diesem Fall müssen Sie die Daten zu entschlüsseln. Das Attribut wird es geben, um Sie im raw-ASN.1, die wir brauchen, um Sinn zu machen aus ihm heraus.
Leider gibt es nichts in .NET, die können es tun, aus der box heute. Allerdings
CryptDecodeObjectEx
können es tun, wenn Sie plattformaufrufe. Die Besonderheiten, dabei lasse ich aus, aber es gibt genügend Informationen um zu zeigen, wie man diese Funktion aufrufen. Sie werden wollen, rufen Sie es mit der lpszStructType parameter auf einen Wert von(IntPtr)16
. Dadurch erhalten Sie wieder eineCERT_POLICIES_INFO
Struktur, die eine Zählung und Zeiger auf ein array vonCERT_POLICY_INFO
Strukturen. Diese Struktur ist ein Feld, auf dem es aufgerufenpszPolicyIdentifier
. Es ist diese policy-OID, die wir interessiert sind.Jede Zertifizierungsstelle verfügt über ein oder mehrere OIDs, die Sie verwenden, um ein Zertifikat als EV. Jede ZERTIFIZIERUNGSSTELLE Dokumente, die Sie auf Ihrer Politik-Seite. Jedoch, der beste Ort, um eine up-to-date Liste der dies ist wahrscheinlich Chrom-Source-Code.
Wenn das Zertifikat hat eine Politik, die mit einer dieser OIDs, dann bewegen wir uns auf die nächste Prüfung.
Root-Fingerprint
Wenn man sich die Chrom-Quelle im oben genannten link, du wirst sehen, neben der policy-IDS, es hält auch den SHA256-Fingerabdruck der root.
Dies ist, weil zusätzlich zu dem Zertifikat die richtige OID, muss es von einer ZERTIFIZIERUNGSSTELLE ausgestellt, deren Fingerabdruck übereinstimmt. In den Chrom-Quelle, sehen wir etwas wie dieses:
Also das Zertifikat muss entweder das "1.3.6.1.4.1.17326.10.14.2.1.2" oder "1.3.6.1.4.1.17326.10.14.2.2.2" policy-IDS, sondern die Wurzel muss ein SHA1-Fingerabdruck des binären oben gesehen.
Dies verhindert, dass ein Schurken-CA jemals mit einer Richtlinien-ID, die es nicht besitzen.
Sperrüberprüfung
Wenn der browser nicht in der Lage ist, zu überprüfen, ob das Zertifikat widerrufen, dann wird es nicht als ein EV-Zertifikat. Online Widerruf überprüfung muss durchgeführt werden, wenn der AUFTRAGGEBER kann die cache-Ergebnis.
Können Sie durchführen, Widerruf Prüfung
X509Chain.Build
durch setzen des entsprechenden flags werden die auf die Kette vor dem AufrufBuild
.Zertifikat Transparenz
Dieser ist etwas schwieriger zu überprüfen, aber Google hat die entsprechende Dokumentation auf der Zertifikat die Transparenz-website. Wenn das Zertifikat ausgestellt wurde, nach 1/1/2015, Zertifikat Transparenz erforderlich ist. Einige Zertifikate sind auch auf der Whitelist von Chrome wie angegeben auf der Chrom-Projekt Seite.
Vertrauenswürdigen Root -
Dieses ist ziemlich geradlinig, aber muss das Zertifikat gehört zu einer vertrauenswürdigen Stammzertifizierungsstelle. Wenn das Zertifikat selbst signiert, es kann nicht sein, EV. Dies kann nochmals überprüft werden, beim aufrufen
X509Chain.Build()
.Mehrere Vertrauen Pfade
Ist es möglich, ein Zertifikat zu haben, mehrere Vertrauen Pfade, sagen, wenn das Zertifikat ausgestellt wurde, von einem Stamm war cross-unterzeichnet. Wenn es mehrere Vertrauen Pfaden, die alle Pfade gültig sein muss. Ebenfalls sperrüberprüfung getan werden muss, mit allen Pfaden. Wenn einer der Pfade, zeigen Sie das Zertifikat als revoziert, dann wird das Zertifikat ist nicht gültig.
Leider .NET und auch Win32-haben nicht eine große Prüfung alle Zertifikats-Ketten oder sogar immer mehr als eine Kette, soweit ich weiß.
Alle diese Kombination, wenn Sie alle übergeben, dann wird das Zertifikat kann als ein EV-Zertifikat.