Armazene o certificado X509 no banco de dados

Para acessar o serviço da web, preciso de um certificado.

Eu gerei meus certificados:

openssl genrsa 1024 > private.key
openssl req -new -x509 -nodes -sha1 -days 1100 -key private.key > public.cer

depois mesclou esses dois em um certificado pfx

openssl pkcs12 -in public.cer -inkey private.key -export -out client.pfx

então carreguei meu arquivo pfx como X509Certificate2

X509Certificate2 clientCert = new X509Certificate2("cert.pfx", "password");

Agora, eu gostaria de criar uma tabela na base de dados que contém os seguintes campos:

PrivateKey NVARCHAR  
PublicCer NVARCHAR  
Password NVARCHAR  

Em seguida, copie o conteúdo do arquivo private.key, juntamente com ----- BEGIN CERTIFICATE ----- e ----- END CERTIFICATE -----, o mesmo para public.cer e defina a senha. Agora, como posso obter uma instância adequada do X509Certificate2 lendo esses dados do DB? Em outras palavras, como posso gerar um arquivo pfx a partir do código, com base na chave privada e no certificado?

Vou tentar ser mais preciso:

 string connectionString; string query; string cert;

    connectionString = ConfigurationManager.ConnectionStrings[0].ConnectionString;
    query = "SELECT clientcert FROM settings_services WHERE ID = 1";

    using (SqlConnection cn = new SqlConnection(connectionString))
    {
        SqlCommand cmd = new SqlCommand(query, cn);
        cn.Open();
        cert = (string)cmd.ExecuteScalar();
    }

    X509Certificate2  serverCert = new X509Certificate2(Encoding.UTF8.GetBytes(cert));

Este código carregará corretamente uma sequência de certificados (certificado x509, iniciando com ----- BEGIN CERTIFICATE ----- e terminando ----- END CERTIFICATE -----).

Agora eu preciso obter a chave privada:

Minha chave privada está no formato RSA (----- BEGIN RSA PRIVATE KEY ---- etc ...)

Preciso carregá-lo e atribuí-lo ao serverCert, para poder usar este certificado para autenticar no serviço da web.

Alguma sugestão de como fazer isso?

questionAnswers(2)

yourAnswerToTheQuestion