es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El certificado del emisor no tiene una extensión de Restricciones Básicas.

Estoy tratando de crear un certificado usando la clase CertificateRequest y utilizando un certificado de AC ya creado como emisor. Pero me está apareciendo la siguiente excepción: El certificado emisor no tiene una extensión de Restricciones Básicas.
La excepción ocurre en la línea siguiente:

X509Certificate2 cert = req.Create(certCA, DateTimeOffset.Now, DateTimeOffset.Now.AddYears(2), Encoding.ASCII.GetBytes(password));

Este es mi código:

public static void CreateCertificate(string username, string password){

var certCA = GetCertificateFromStorage(StoreName.Root, StoreLocation.LocalMachine, "RootCA");

<pre><code>RSA rsa = RSA.Create(2048);
CertificateRequest req = new CertificateRequest("CN=" + username, rsa, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);       
X509Certificate2 cert = req.Create(certCA, DateTimeOffset.Now, DateTimeOffset.Now.AddYears(2), Encoding.ASCII.GetBytes(password));

string path1 = (AppDomain.CurrentDomain.BaseDirectory + @"\\" + username + ".pfx");
string path2 = (AppDomain.CurrentDomain.BaseDirectory + @"\\" + username + ".cer");

File.WriteAllBytes(path1, cert.Export(X509ContentType.Pfx, password));

File.WriteAllText(path2,
    "-----BEGIN CERTIFICATE-----\r\n"
    + Convert.ToBase64String(cert.Export(X509ContentType.Cert), Base64FormattingOptions.InsertLineBreaks)
    + "\r\n-----END CERTIFICATE-----");
</code></pre>

}

¿Cómo puedo solucionar este problema? Incluso alguna otra sugerencia de cómo puedo crear un certificado ‘programáticamente’ sería útil.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema se debe al hecho de que el certificado de CA utilizado como emisor no tiene la extensión de Restricciones Básicas. Esta extensión es obligatoria para que un certificado pueda ser utilizado como certificado de CA.

    Para solucionar este problema, deberás asegurarte de que el certificado de CA tenga la extensión de Restricciones Básicas establecida en “verdadero”. Puedes hacer esto creando un nuevo certificado de CA que incluya esta extensión, o modificando el certificado de CA existente para agregarlo.

    Alternativamente, puedes utilizar un certificado de CA diferente como emisor, uno que ya tenga la extensión de Restricciones Básicas configurada correctamente.

    En cuanto a la creación de un certificado programáticamente, tu enfoque utilizando la clase CertificateRequest parece razonable. Solo asegúrate de utilizar un certificado emisor válido con las extensiones requeridas. También existen otras bibliotecas y frameworks disponibles para la creación y gestión de certificados, como BouncyCastle y OpenSSL.NET, que puedes explorar.

Comments are closed.