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.

 

2 Replies
  1. 3

    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

    • Mi dispiace – “Il telecomando certificato non è valido secondo la procedura di convalida.”
    • Per l’auto certificati firmati. ritorno sempre vero per la Convalida del Certificato del gestore (ValidateServerCertificate)
  2. 2

    .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)?

    • Ho sentito parlare di questo problema (la chiave privata non incluso), ma credo che il mio .il cer è tutto a posto. Prima di questo errore, ho eccezione della chiave privata. Poi ho generato il certificato di file con un altro programma, e passato questo errore. Ho bisogno d SSL solo per proteggere la trasmissione. L’autenticazione non è realmente necessario. Accessori il mio zoppo, ma sembra che io stavo dormendo sul conferenze sulla sicurezza:)
    • Sicuramente la modifica la domanda cambiato tutto. Che cosa si ottiene in sslPolicyErrors ?

Lascia un commento