Was ist der Unterschied zwischen X509Certificate2 und X509Certificate in .NET?
-
19-09-2019 - |
Frage
Was ist der Unterschied zwischen den beiden?
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)