Frage

Was ist der Unterschied zwischen den beiden?

War es hilfreich?

Lösung

Die X509Certificate wurde in NET v1.0 eingeführt / 1.1 und wurde (vergleichsweise) in ihrer Funktionalität begrenzt. Es kann Informationen über ein bestehendes Zertifikat (gültige Daten, Emittenten, etc.) verwendet werden, um zu bekommen. Es hatte einfache Methoden / Operationen (das heißt einen CERT von der Festplatte zu lesen).

Die x509Certificate2 eine Unterklasse von X509Certificate mit zusätzlicher Funktionalität ist.

  • Sie stellt ein tatsächliches X509-Zertifikat.
  • Es war neu in .NET Framework 2.0.
  • Diese Klasse gibt Ihnen Zugriff auf alle V2 und V3 Eigenschaften (Behörde Schlüsselkennung und Schlüsselverwendung).
  • Es unterstützt ein Zertifikat von einem Zertifikatspeicher geladen werden.

Andere Tipps

Der Vollständigkeit halber, hier ist eine Kopie des entsprechenden Abschnitts der Seite verlinkt sind in @ dommer Antwort auf , da die Website kann nicht mehr sein, und nur in den Google-Cache für wer weiß, wie lange:

  

Version 1.1 des Rahmen hatte sehr wenig anders als die   X509Certificate Klasse, damit Sie Zertifikate manipulieren. Im   Tatsächlich gab die v1.1 X509Certificate Klasse nur grundlegende Unterstützung: es nur   Zugriff auf die X509-Version 1 Felder gab (wie die gültig ab und   gültig Termine, Betreff und öffentlicher Schlüssel), aber nicht die Version 2 Felder (wie   die Behörde Schlüsselkennung) noch die Version 3 Felder (wie der Schlüssel   Verwendungszweck). Es gab keine Unterstützung ein Zertifikat von einem Zertifikat zu laden   Laden, noch hat es die Einrichtungen Zugang Zertifikat   Sperrlisten oder Zertifikatvertrauenslisten. Microsoft verbessert auf   dies mit der Web Services Enhancement (WSE) Toolkit zur Verlängerung des   Zertifikat-Klasse und bietet Klassen für den Zugriff Zertifikatspeicher.   Diese Klassen können jetzt in .NET 3.0 / 2.0 Framework-Bibliothek gefunden werden.

     

Die erste große Veränderung ist eine neue Klasse namens X509Certificate2 die   ergibt sich aus X509Certificate. Die Methoden der X509 zugreifen   Zertifikatfelder sind veraltet und jetzt die Klasse hat   Eigenschaften diese Felder zuzugreifen. Darüber hinaus, wenn das Zertifikat   eine zugehörige private Schlüssel dann gibt die Klasse Zugriff auf diesen Schlüssel.   Es gibt Methoden, die Sie ein Passwort, wenn die privaten bereitzustellen erlauben   Schlüssel wird durch ein geschützt. Das Passwort wird durch eine Securegeben   Parameter, der eine besondere Art ist, die sicherstellt, dass, wenn das Objekt   es belegt ist nicht mehr der Speicher wird so geschrieben über verwendet werden   dass das Passwort kann nicht von einem anderen Prozess auf dem Gerät gelesen werden.   Sichere Strings und andere Formen der geschützten Daten werden in einem abgedeckt werden   späterer Abschnitt.

     

Da X509Certificate2 ergibt sich aus X509Certificate bedeutet es, dass Sie   können die statischen Methoden CreateFromeCertFile anrufen und   CreateFromSignedFile durch die X509Certificate2 Klasse. Jedoch,   Diese Methoden geben ein X509Certificate Objekt und Sie können nicht nach unten   werfen diese auf ein X509Certificate2 Objekt. Die X509Certificate Klasse   wurde in der Version 3.0 / 2.0 verbessert: es Eigenschaften Zugang bietet   einige der X509 Felder; es bietet Import und Export Methoden   ein Objekt von einem Byte-Array initialisiert oder ein Byte-Array erzeugen aus   das Zertifikat und es hat Konstruktoren, die ein Objekt erstellen wird   aus einer Datei (ASN.1 DES) und von einem Byte-Array. Interessanterweise ist die   X509Certificate2 Klasse hat einen Konstruktor, der ein erstellen   X509Certificate2 Objekt von einem X509Certificate Objekt. Beachten Sie, dass   obwohl ein X509Certificate Objekt kann die X509v1 nur zeigen Felder, die es   kann aus einem X509v3 Zertifikat erstellt werden, und so, wenn Sie eine erstellen   X509Certificate2 Objekt aus einem X509Certificate Objekt, das Sie sein   der Lage, die X509v3 Felder zugreifen zu können.

Um ein X.509-Zertifikat von "X509Certificate" auf "X509Certificate2", versuchen Sie so etwas wie dies zu konvertieren:

X509Certificate  X509  = sslStream.RemoteCertificate;
X509Certificate2 X5092 = new X509Certificate2(X509);

Für diejenigen, die das Zertifikat lesen möchten und diese zu authentifizieren, verwenden würde einfach eine X509Certificate2 erstellen und die X509Certificate in seinem Konstruktor übergeben.

Für eine Baugruppe (exe) den Code unterzeichnet würde wie dieser Code, und ich weglassen Fehlerprüfung für Einfachheit.

Module m = Assembly.GetEntryAssembly().GetModules()[0];
using (var cert = m.GetSignerCertificate())
using (var cert2 = new X509Certificate2(cert))
{
   var _clientHandler = new HttpClientHandler();
   _clientHandler.ClientCertificates.Add(cert2);
   _clientHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
   var myModel = new Dictionary<string, string>
   {
       { "property1","value" },
       { "property2","value" },
   };
   using (var content = new FormUrlEncodedContent(myModel))
   using (var _client = new HttpClient(_clientHandler))
   using (HttpResponseMessage response = _client.PostAsync($"{url}/{controler}/{action}", content).Result)
   {
       response.EnsureSuccessStatusCode();
       string jsonString = response.Content.ReadAsStringAsync().Result;
       var json = new Newtonsoft.Json.JsonSerializer();
       var myClass = JsonConvert.DeserializeObject<MyClass>(json);
    }
}

Offensichtlich du bist Klasse nicht genannt MyClass aber einige Business-Objekt, dass Sie von den Web-Service erwarten würde.

Sie können Sie gefüllt erfordern durch Senden der Eigenschaft & Wert eine Klasse zu Ihrer Aktion senden. Sie können nun dafür sorgen, dass die Anforderung Sie ist von einem gültigen mobilen oder Windows-Client empfangen, indem die Anforderung Zertifikat zu lesen wie folgt:

public class MyController : ApiController
{
    public IHttpActionResult Get()
    {           
       X509Certificate2 clientCertInRequest = Request.HttpContext.Connection.ClientCertificate;
       if (!clientCertInRequest.Verify() || !AllowedCerialNumbers(clientCertInRequest.SerialNumber))
       {
            Response.StatusCode = 404;
            return null;
       }
       //your code
   }

}

Was bleibt, ist der Webserver zu setzen Client-Zertifikate zu akzeptieren ... Sie können alle über Eigenschaften lesen, die von dem neuen Format kommen und Sie haben Ihre öffentlichen Web-Service gesichert, was die meisten scheitern als nur dazu ermächtigt isn werden‘ t mehr gut genug (wenn es jemals war)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top