Para acceder al servicio web necesito un certificado.Tienda X509 Certificado en la base de datos
que generan mis certificados:
openssl genrsa 1024 > private.key
openssl req -new -x509 -nodes -sha1 -days 1100 -key private.key > public.cer
vez fusionada este dos en un certificado PFX por
openssl pkcs12 -in public.cer -inkey private.key -export -out client.pfx
continuación, se carga mi archivo PFX como X509Certificate2
X509Certificate2 clientCert = new X509Certificate2("cert.pfx", "password");
Ahora, lo haría desea crear una tabla en la base de datos que contiene los siguientes campos:
PrivateKey NVARCHAR
PublicCer NVARCHAR
Password NVARCHAR
A continuación, copie el contenido del archivo private.key, junto con ----- BEGIN CERTIFICATE ----- y ----- END CERTIFICATE -----, lo mismo para el public.cer y establece la contraseña Ahora, ¿cómo puedo obtener una instancia adecuada de X509Certificate2 leyendo estos datos de DB? En otras palabras, ¿cómo puedo generar un archivo pfx a partir de código, basado en clave privada y certificado?
Voy a tratar de ser más precisos:
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 se carga correctamente una cadena de certificado (certificado X509, empezando por ----- BEGIN CERTIFICATE ----- y terminando --- - CERTIFICADO ENVIADO -----).
Ahora necesito para obtener la clave privada:
mi clave privada está en formato RSA (----- BEGIN la clave privada RSA ---- etc ...)
Necesito cárguelo y asígnelo a serverCert, para poder usar este certificado para autenticarse en el servicio web.
¿Alguna sugerencia sobre cómo hacer eso?
La respuesta a este problema se encuentra aquí. http://www.codeproject.com/KB/security/CertificatesToDBandBack.aspx Saludos –
Relacionado: https://stackoverflow.com/questions/893757 – explunit