Pregunta

¿Cuál es la diferencia entre los dos?

¿Fue útil?

Solución

El X509Certificate se introdujo en v1.0 .NET / 1,1 y era (relativamente) limitada en su funcionalidad. Se puede utilizar para obtener información acerca de un certificado existente (fecha de validez, emisor, etc.). Tenía métodos simples / operaciones (es decir, la lectura de un cert de disco).

La X509Certificate2 es una subclase de X509Certificate con funcionalidad adicional.

  • Representa un certificado X509 real.
  • Era nuevo en la versión 2.0 de .NET Framework.
  • Esta clase le da acceso a toda la V2 y V3 (propiedades autoridad identificador de clave y clave de uso).
  • Es compatible con la carga de un certificado de un almacén de certificados.

Otros consejos

Para completarlo, aquí es una copia de la sección correspondiente de la sitio vinculado a en respuesta @ de dommer, ya que el sitio ya no puede ser de arriba sólo en la caché de Google para quién sabe cuánto tiempo:

  muy

Versión 1.1 de las Directrices tenía poco que no sea el   X509Certificate clase que le permite manipular certificados. En   De hecho, la clase X509Certificate v1.1 dio soporte únicamente básica: sólo   dio acceso a los campos X509 versión 1 (como la válida desde y   válida para las fechas clave, tema y pública), pero no la versión 2 campos (como   el identificador de clave autoridad) ni versión 3 campos (como la tecla   uso). No hubo apoyo para cargar un certificado de un certificado   almacenar, ni tiene las facilidades de acceso certificado   listas de revocación o listas de certificados de confianza. Microsoft mejoró   esto con los Servicios Web Enhancement (WSE) extender el kit de herramientas   clase de certificado y que ofrecen clases para acceder a los almacenes de certificados.   Estas clases se pueden encontrar ahora en la biblioteca de marco .NET 3.0 / 2.0.

     

El primer gran cambio es una nueva clase llamada X509Certificate2 cuales   deriva de X509Certificate. Los métodos para acceder a la X509   campos de certificado están en desuso y ahora tiene la clase   propiedades para acceder a esos campos. Además, si el certificado tiene   una clave privada asociada entonces la clase da acceso a esta clave.   Hay métodos que le permiten proporcionar una contraseña si lo privado   clave está protegido por una. La contraseña se pasa a través de un SecureString   parámetro que es un tipo especial que se asegura de que cuando el objeto   Ya no se está utilizando la memoria que ocupaba será escrito más de lo que   que la contraseña no puede ser leído por otro proceso en la máquina.   cuerdas seguras y otras formas de datos protegidos serán cubiertos en una   sección posterior.

     

Desde X509Certificate2 deriva de X509Certificate Esto significa que usted   puede llamar a los métodos estáticos y CreateFromeCertFile   CreateFromSignedFile través de la clase X509Certificate2. Sin embargo,   Estos métodos devuelven un objeto X509Certificate y no se puede bajar   echado a un objeto X509Certificate2. La clase tiene X509Certificate   sido mejorada en la versión 3.0 / 2.0: proporciona propiedades de acceso   algunos de los campos X509; proporciona métodos de importación y exportación   inicializar un objeto de una matriz de bytes o generar una matriz de bytes de   el certificado y tiene constructores que crearán un objeto   desde un archivo (DER ASN.1) ya partir de una matriz de bytes. Curiosamente, el   X509Certificate2 clase tiene un constructor que puede crear una   objeto X509Certificate2 de un objeto X509Certificate. Tenga en cuenta que   A pesar de que un objeto X509Certificate sólo puede mostrar los campos de TI X509v1   se pueden crear a partir de un certificado de X509v3 y por lo que si se crea una   X509Certificate2 objeto de un objeto que será X509Certificate   acceder a los campos X509v3.

Para convertir un certificado X.509 de "X509Certificate" a "X509Certificate2", intentar algo como esto:

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

Para aquellos que le gustaría leer el certificado y usar esto para autenticar uno simplemente crear un X509Certificate2 y pasar el X509Certificate en ella del constructor.

Para un montaje firmado (el exe) el código sería un código como éste, y omitir la validación de error por simplicidad.

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);
    }
}

Es evidente que eres de clase no se llama MiClase pero algunos objetos de negocio que usted esperaría de servicio web.

Puede enviar una clase a su acción mediante el envío de la propiedad y el valor que requieren lleno. Ahora puede estar seguro de que la solicitud que ha recibido es de un cliente móvil o ventanas válida mediante la lectura de la solicitud de certificado de este modo:

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
   }

}

Lo que queda es configurar el servidor web para aceptar certificados de cliente ... Usted puede leer todo acerca de las propiedades que provienen del nuevo formato y que haya obtenido su servicio web público, algo que la mayoría no lo hacen ISN como se acaba de ser autorizado' t lo suficientemente bueno ya (si es que alguna vez lo fue)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top