I am trying to use c# to generate a X509Certificate2
.
I came across this answer which is what I am looking for. But, that code is using absolute methods.
The method SetSignatureAlgorithm
has the following warning
Not needed if Generate used with an ISignatureFactory
Also, the code certificateGenerator.Generate(issuerPrivateKey, random)
has the following message
Use Generate with an ISignatureFactory
How can I create a ISignatureFactory
to fix these two warnings?
CodePudding user response:
Will this work for you? This method generates a private key on the fly, signs it with a self-signed certificate and returns the cert and key as a PKCS#12 bundle (can be saved in a .pfx file if need be).
public static X509Certificate2 CreateX509CryptCertificate(string name, int keyLength = 2048, int yearsValid = 3) {
X509KeyStorageFlags storageFlags = X509KeyStorageFlags.PersistKeySet |
X509KeyStorageFlags.Exportable;
using var rsa = RSA.Create(keyLength);
var request = new CertificateRequest($"CN={name}", rsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
using X509Certificate2 ephemeral = request.CreateSelfSigned(DateTime.Now, DateTime.Now.AddYears(yearsValid));
return new X509Certificate2(ephemeral.Export(X509ContentType.Pkcs12), string.Empty, storageFlags);
}
CodePudding user response:
I found a way
var randomGenerator = new CryptoApiRandomGenerator();
var random = new SecureRandom(randomGenerator);
var subjectKeyPair = keyPairGenerator.GenerateKeyPair();
ISignatureFactory signatureFactory = new Asn1SignatureFactory(PkcsObjectIdentifiers.Sha256WithRsaEncryption.ToString(), subjectKeyPair.Private, random);