2010-10-07 5 views
5

Je développe un serveur de socket en utilisant C# .NET. J'utilise le modèle asynchrone fourni par la classe SocketAsyncEventArgs, car il doit être un serveur hautes performances pour prendre en charge de nombreuses connexions sur de courtes périodes. Ensuite, je veux sécuriser la communication entre les clients et le serveur, et je pense que je pourrais utiliser SSL.C#: SSL avec SocketAsyncEventArgs?

Existe-t-il un moyen d'utiliser SSL avec le modèle SocketAsyncEventArgs? Je sais que .NET a la classe SslStream pour la sécurisation SSL, mais j'ai besoin d'utiliser SocketAsyncEventArgs pour des performances élevées.

Est-il possible d'utiliser SSL à un niveau supérieur, sans l'implémenter dans le code du serveur?

Merci d'avance.

+1

John avez-vous reçu plus d'informations à ce sujet? – Dreaddan

Répondre

0

Vous pouvez prendre en charge l'implémentation tierce du protocole SSL/TLS, tel que notre SecureBlackbox, et l'utiliser avec n'importe quel transport, y compris les sockets .NET en mode asynchrone. Le composant serveur SSL de SecureBlackbox ne possède pas son propre socket, mais déclenche des événements, dans les gestionnaires desquels vous écrivez votre code lié à la socket. De cette façon vous pouvez brancher n'importe quel transport, même sans socket.

0

Je pense que j'ai peut-être trouvé un projet qui offre cela.

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

Je suis toujours à jouer avec elle et suis heurtant un problème de chargement du certificat de serveur, cependant, en regardant à travers le code source, il semble prometteur. Un aspect sur lequel je ne suis pas sûr, c'est qu'il p/appelle à secur32.dll plutôt que d'être une pure implémentation C#, donc je ne suis pas sûr de l'impact de la mémoire/performance de cela.

Les détails sur la page du projet sourceforge sont clairsemés quant à l'objectif du projet.

5

Je ne sais pas si quelqu'un se soucie plus car c'est tellement vieux mais j'avais besoin de faire exactement cela cette semaine et je n'ai rien trouvé sur internet qui répondait à mes besoins. Peut-être qu'il y a quelque chose de nouveau dans le framework qui fait cela que je n'ai pas pu trouver ... Peu importe, je publierais du code source mais comme je l'ai écrit pour mon entreprise et qu'ils ont tendance à froncer les sourcils, je vais décrire pris:

Depuis que SslStream prend un flux dans le constructeur, j'ai implémenté mon propre sous-type Stream avec un MemoryStream sous-jacent pour les lectures et un autre pour les écritures. Je passe également dans le TcpClient à cet objet aussi.

J'ai utilisé le TcpClient pour effectuer la prise de contact pour la configuration de la connexion SSL. Après avoir authentifié le serveur ou le client en fonction de la façon dont je l'utilise, j'utilise ensuite mes deux MemoryStreams pour la lecture/écriture de SslStream.

Donc, pour les écritures asynchrones, j'écris d'abord ma charge sur le SslStream qui remplit mon MemoryStream pour l'écriture avec des données cryptées. Avec les données cryptées du MemoryStream, je remplis le tampon SocketAsyncEventArgs et appelle la méthode TcpClient SendAsync. Pour les lectures, c'est à peu près le contraire. Je ne peux pas dire que ça m'excite vraiment de déplacer les données comme ça, mais tant que vous ne laissez pas vos objets MemoryBuffer se réallouer constamment, ce n'est pas un problème de performance. Au moins de cette façon, je peux utiliser uniquement le framework et mon propre code sans utiliser de logiciel tiers.