Import certificate, private or public keys (PEM, CER, PFX)
Encrypted private key, RSA private key in PEM file
PEM stands for Privacy Enhanced Mail format. The PEM format is the most common format that Certificate Authorities issue certificates in. PEM certificates usually have extensions such as .pem, .crt, .cer, and .key. They are Base64 encoded ASCII files.
PemReader pem = new PemReader(); RSACryptoServiceProvider rsa = pem.ReadEncryptedPrivateKeyFromFile( "EncryptedPrivateKey.pem", // "EncryptedRSAPrivateKey.pem" "cypher");
This code handles following formats:
PKCS #8 EncryptedPrivateKeyInfo Encrypted Format:
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIICojAcBgoqhkiG9w0BD .....
Private Key (Traditional SSLeay RSAPrivateKey format) Encrypted:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,24A667C253F8A1B9
mKz .....
You can remove the passphrase from the private key using openssl:
openssl rsa -in EncryptedPrivateKey.pem -out PrivateKey.pem
Unencrypted private key in PEM file
PemReader pem = new PemReader(); RSACryptoServiceProvider rsa = pem.ReadPrivateKeyFromFile("PrivateKey.pem");
This code handles following formats:
PKCS #8 PrivateKeyInfo Unencrypted:
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0B ......
Private Key (Traditional SSLeay RSAPrivateKey format) Unencrypted:
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCcHVm .....
Public key in PEM file
PemReader pem = new PemReader(); RSACryptoServiceProvider rsa = pem.ReadPublicKeyFromFile("PublicKey.pem")
This code handles following formats:
Public Key (SubjecPublicKeyInfo):
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEB .....
Certificate/private key in PFX file
X509Certificate2 certificate = new X509Certificate2( "certificate.pfx", "", X509KeyStorageFlags.PersistKeySet) if (certificate.HasPrivateKey) { using (var rsa = (RSACryptoServiceProvider)certificate.PrivateKey) { // ... } }
Certificate in PEM/CER file
Note: The private key is never stored in a .pem/.cer certificate file.
X509Certificate2 certificate = new X509Certificate2("certificate.cer");
-or-
PemReader pem = new PemReader(); X509Certificate2 certificate = pem.ReadCertificateFromFile("certificate.cer");
This code handles following formats:
-----BEGIN CERTIFICATE-----
MIIFsTCCA5mgAwIBAgIKYQ .....