C# SSL secure sockets
Ho una multa, di lavoro communicator applicazione, scritta in C#. Ora ho bisogno di implementare una connessione sicura al server. Ho provato a cambiare Presa e TcpClient oggetti in SslStream, ma ho avuto un paio di errori.
In primo luogo ho generato un .cer certificato di utilizzare makecert. OpenSSL certificati non ha funzionato per me, perché non comprendono la chiave privata. Poi ho creato un oggetto certificato sul server, associata alla SslStream:
X509Certificate serverCertificate = X509Certificate.CreateFromCertFile("ca.cer");
TcpClient clientSocket = this.tcpListener.AcceptTcpClient();
SslStream ssls = new SslStream(clientSocket.GetStream(), false);
ssls.AuthenticateAsServer(serverCertificate, false, SslProtocols.Tls, true);
Sul lato client sto facendo questo:
TcpClient client = new TcpClient(settings.IP, settings.Port);
sslStream = new SslStream(client.GetStream(), false,
new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
sslStream.AuthenticateAsClient(settings.IP);
public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
return true;
Console.WriteLine("Certificate error: {0}", sslPolicyErrors);
return false;
}
ma il AuthenticateAsClient funzione genera un’eccezione. Ho provato diversi parametri del metodo, ma niente di tutto questo ha funzionato per me.
Qualcuno potrebbe aiutarmi, o spiegare passo per passo come modificare semplici prese in quelle sicuro? Per essere chiari, SSL non l’obbligo – se non c’è modo più semplice per effettuare la connessione sicura che posso usare che.
Modifica:
Messaggio di eccezione è la seguente:
The remote certificate is invalid according to the validation procedure.
Che cosa è l’eccezione ?
Credo che si sono sempre l’eccezione, perché il certificato client è respinta in quanto valido dal server (a meno che non hai fatto le cose necessarie per impostare un rapporto di fiducia).
Quando si utilizzano i certificati firmati(quelli creati da makecert), si dovrebbe anche fornire un Certificato Client callback di Convalida durante la creazione del SslStream oggetto. Utilizzare questo overload del costruttore http://msdn.microsoft.com/en-us/library/ms145056.aspx
.CER file di solito contiene un certificato senza una chiave privata. Caricamento del server non funzionano. Hai bisogno di una chiave privata. Il modo più semplice è quello di generare il certificato e una chiave e salvarli insieme a formato PFX. Poi caricare il certificato e una chiave da PFX sul server.
Ora con il tuo codice, solo autenticare il server. È questo quello che vuoi fare (cioè non si desidera autenticare il client sul server)?