usted tiene el potencial para al menos dos problemas ...
Primera ...
Su archivo de certificado de cliente no puede contener una clave privada a menos que se accede con una contraseña. Debería utilizar un certificado PKCS # 12 (* .pfx) con una contraseña para que su cliente tenga acceso a la clave privada. Su código de cliente deberá proporcionar la contraseña al abrir el certificado ya que otros ya lo han publicado. Hay varias maneras de crear esto, lo más sencillo es utilizar la siguiente línea de comandos para generar primera vez el certificado, a continuación, utilizar el administrador de certificados de MMC para exportar los certificados de clave privada:
Process p = Process.Start(
"makecert.exe",
String.Join(" ", new string[] {
"-r",// Create a self signed certificate
"-pe",// Mark generated private key as exportable
"-n", "CN=" + myHostName,// Certificate subject X500 name (eg: CN=Fred Dews)
"-b", "01/01/2000",// Start of the validity period; default to now.
"-e", "01/01/2036",// End of validity period; defaults to 2039
"-eku",// Comma separated enhanced key usage OIDs
"1.3.6.1.5.5.7.3.1," +// Server Authentication (1.3.6.1.5.5.7.3.1)
"1.3.6.1.5.5.7.3.2", // Client Authentication (1.3.6.1.5.5.7.3.2)
"-ss", "my",// Subject's certificate store name that stores the output certificate
"-sr", "LocalMachine",// Subject's certificate store location.
"-sky", "exchange",// Subject key type <signature|exchange|<integer>>.
"-sp",// Subject's CryptoAPI provider's name
"Microsoft RSA SChannel Cryptographic Provider",
"-sy", "12",// Subject's CryptoAPI provider's type
myHostName + ".cer"// [outputCertificateFile]
})
);
Segundo ...
Su próximo problema será el servidor. El servidor debe permitir este certificado. Tiene la lógica correcta, pero en el lado equivocado del cable, mueva esta línea al servidor web que maneja la solicitud. Si no puede, debe tomar el '.archivo CER' salvado anteriormente para el servidor y agregarlo a la lista de confianza del equipo servidor:
ServicePointManager.ServerCertificateValidationCallback = (a,b,c,d) => true;
¿Conoce cómo hacer el mismo trabajo en Windows .NET? Por algún motivo, no puedo hacer que funcione sin registrar el certificado en la tienda x509 – galets