example - ¿Cómo crear un x509Certificate2 completamente nuevo en.net?
x509certificate2 c# example (3)
Lo busco en Google desde la web, encuentro muchas muestras para generar un nuevo x509Certificate2 desde un archivo en .net, pero no hay una sola muestra para mostrar cómo generar un x509Certificate2 completamente nuevo desde el principio en .net.
¿Hay alguien que pueda decirme cómo hacerlo en .net?
Muchas gracias.
Aquí hay un código que puedes usar:
static X509Certificate2 GenerateCertificate(string certName)
{
var keypairgen = new RsaKeyPairGenerator();
keypairgen.Init(new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), 1024));
var keypair = keypairgen.GenerateKeyPair();
var gen = new X509V3CertificateGenerator();
var CN = new X509Name("CN=" + certName);
var SN = BigInteger.ProbablePrime(120, new Random());
gen.SetSerialNumber(SN);
gen.SetSubjectDN(CN);
gen.SetIssuerDN(CN);
gen.SetNotAfter(DateTime.MaxValue);
gen.SetNotBefore(DateTime.Now.Subtract(new TimeSpan(7, 0, 0, 0)));
gen.SetSignatureAlgorithm("MD5WithRSA");
gen.SetPublicKey(keypair.Public);
var newCert = gen.Generate(keypair.Private);
return new X509Certificate2(DotNetUtilities.ToX509Certificate((Org.BouncyCastle.X509.X509Certificate)newCert));
}
para que esto funcione, no olvide agregar una referencia a la biblioteca BouncyCastle
Creo que no puedes hacerlo usando esa API. Pero puede crear uno usando Bouncy Castle (http://www.bouncycastle.org) y luego convertir ese objeto en un objeto X509Certificate2 (BC tiene alguna clase de utilidad para hacer eso).
-editar- Echar un vistazo a estas clases de BC: X509V3CertificateGenerator y X509Certificate
La clase de utilidad BC que más tarde convertirá un objeto BC X509Certificate en un objeto X509Certificate2 regular es: DotNetUtilities
Puede usar PINVOKE para llamar a Crypt32 para crear un certificado autofirmado . Hay un código de muestra disponible que generará uno y lo colocará en el almacén de certificados para usted.
También está el generador de certificados de Keith Brown, que está escrito en código administrado y tiene una biblioteca que puede usar .
Alternativamente, puedes usar BouncyCastle usando Org.BouncyCastle.X509.X509V3CertificateGenerator
y usar los métodos de utilidad en Org.BouncyCastle.Security.DotNetUtilities
y llamar a ToX509Certificate()
.
Si desea crear una solicitud y hacer que sea firmada por una CA, es más fácil en .NET, ya que la mayoría de esas clases se pueden importar como DLL de interoperabilidad COM. Pero esa es otra pregunta.