2010-10-07 12 views
5

Sto sviluppando un server socket utilizzando C# .NET. Sto usando il modello asincrono fornito dalla classe SocketAsyncEventArgs, perché deve essere un server ad alte prestazioni per supportare molte connessioni in brevi periodi di tempo. Successivamente, voglio proteggere la comunicazione tra i client e il server e penso che potrei usare SSL.C#: SSL con SocketAsyncEventArgs?

Esiste un modo per utilizzare SSL con il modello SocketAsyncEventArgs? So che .NET ha la classe SslStream per la protezione SSL, ma ho bisogno di usare SocketAsyncEventArgs per alte prestazioni.

È possibile utilizzare SSL in un livello superiore, senza implementarlo nel codice del server?

Grazie in anticipo.

+1

John hai avuto ulteriori informazioni su questo? – Dreaddan

risposta

0

È possibile eseguire l'implementazione di terze parti del protocollo SSL/TLS, ad esempio il nostro SecureBlackbox, e utilizzarlo con qualsiasi trasporto, compresi i socket .NET in modalità asincrona. Il componente server SSL di SecureBlackbox non ha il proprio socket, ma lancia eventi, nei cui gestori scrivi il codice relativo al socket. In questo modo puoi collegare qualsiasi trasporto, anche senza socket.

0

Penso di aver trovato un progetto che fornisce questo.

https://sourceforge.net/projects/socketservers/

che sto ancora giocando con esso e sto sbattere contro un problema di caricare il certificato del server, tuttavia, guardando attraverso il codice sorgente sembra promettente.

Un aspetto io sono sicuro circa è che p/invoca a Secur32.dll piuttosto che essere un'implementazione puro C#, quindi non sono sicuro di quello che l'impatto della memoria/prestazioni che è.

I dettagli sulla pagina del progetto sourceforge sono scarsi per quanto riguarda l'obiettivo del progetto.

5

Non so se a qualcuno importa più perché questo è così vecchio, ma ho dovuto fare proprio questa settimana e non riuscivo a trovare nulla su internet che ha soddisfatto le mie esigenze. Forse c'è qualcosa di nuovo nel framework che fa questo che non sono stato in grado di trovare ... Indipendentemente, vorrei postare il codice sorgente ma da quando l'ho scritto per la mia azienda e tendono a disapprovarlo, descriverò l'approccio I preso:

Poiché SslStream acquisisce un flusso nel costruttore, ho implementato il mio sottotipo Stream con un MemoryStream sottostante per le letture e un altro per le scritture. Passerò anche il TcpClient a questo oggetto.

Ho usato il TcpClient per fare l'handshake per l'impostazione della connessione SSL. Dopo aver autenticato il server o il client a seconda di come lo sto usando, utilizzo quindi i miei due MemoryStream per la lettura/scrittura SslStream.

Quindi per le scritture Async, prima scrivo il mio carico utile su SslStream che popola il mio MemoryStream per scrivere con dati crittografati. Con i dati crittografati da MemoryStream, compilo il buffer SocketAsyncEventArgs e richiama il metodo SendAsync TcpClient. Per le letture, è praticamente l'opposto.

Non posso dire che mi ecciti in particolare a spostare i dati in questo modo ma finché non si lasciano costantemente riallineare gli oggetti MemoryBuffer, non si tratta di un problema di prestazioni. Almeno in questo modo, posso utilizzare solo il framework e il mio codice senza fare affidamento su software di terze parti.