si hanno le potenzialità per almeno due problemi ...
Prima ...
Il file di certificato client non può contenere una chiave privata meno che non sia accessibile con una password. Dovresti utilizzare un certificato PKCS # 12 (* .pfx) con una password in modo che il tuo cliente abbia accesso alla chiave privata. Il codice cliente dovrà fornire la password quando si apre il certificato come altri hanno già pubblicato. Ci sono diversi modi per creare questo, il modo più semplice è quello di utilizzare la seguente riga di comando per generare prima il certificato, quindi utilizzare il gestore certificato di MMC per esportare i certificati chiave privata:
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]
})
);
Seconda ...
Il tuo prossimo problema sarà sul lato server. Il server deve consentire questo certificato. Hai la logica giusta, ma sul lato sbagliato del filo, sposta questa linea sul server web che gestisce la richiesta. Se non puoi, devi quindi prendere il '.file di cer' salvato in precedenza al server e aggiungerlo alla lista di fiducia del computer server:
ServicePointManager.ServerCertificateValidationCallback = (a,b,c,d) => true;
sai come fare lo stesso lavoro su Windows .NET? Per qualche motivo non riesco a farlo funzionare senza registrare il certificato nel negozio x509 – galets