2010-10-07 32 views
5

Estoy desarrollando un servidor de socket usando C# .NET. Estoy utilizando el modelo asíncrono proporcionado por la clase SocketAsyncEventArgs, porque debe ser un servidor de alto rendimiento para admitir muchas conexiones en cortos períodos de tiempo. A continuación, deseo asegurar la comunicación entre los clientes y el servidor , y creo que podría usar SSL.C#: SSL con SocketAsyncEventArgs?

¿Hay alguna forma de utilizar SSL con el modelo SocketAsyncEventArgs? Sé que .NET tiene la clase SslStream para la seguridad de SSL, pero necesito usar SocketAsyncEventArgs para un alto rendimiento.

¿Es posible usar SSL en un nivel superior, sin implementarlo en el código del servidor?

Gracias de antemano.

+1

John ¿obtuviste más información sobre esto? – Dreaddan

Respuesta

0

Puede tomar la implementación de un tercero del protocolo SSL/TLS, como nuestro SecureBlackbox, y usarlo con cualquier medio de transporte, incluidos los sockets .NET en modo asíncrono. El componente de servidor SSL de SecureBlackbox no tiene su propio socket, sino que activa eventos, en cuyos manejadores se escribe el código relacionado con el socket. De esta forma, puedes enchufar cualquier transporte, incluso uno que no sea zócalo.

0

Creo que he encontrado un proyecto que proporciona esto.

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

todavía estoy jugando con él y me he toparse con un problema de cargar el certificado de servidor, sin embargo, mirando a través del código fuente que parece prometedor.

Un aspecto del que no estoy seguro es que p/invoca a secur32.dll en lugar de ser una implementación pura de C#, por lo que no estoy seguro de cuál es el impacto de la memoria/rendimiento.

Los detalles en la página del proyecto sourceforge son escasos en cuanto a cuál es el objetivo del proyecto.

5

No estoy seguro si a alguien le importa ya que esto es muy viejo, pero tenía que hacer precisamente eso esta semana y no pude encontrar nada en Internet que satisficiera mis necesidades. Tal vez hay algo nuevo en el marco que hace esto que no pude encontrar ... En cualquier caso, publicaría el código fuente, pero como lo escribí para mi empresa y tienden a fruncir el ceño, voy a describir el enfoque que tomó:

Dado que SslStream toma una secuencia en el constructor, implementé mi propio subtipo Stream con un MemoryStream subyacente para lecturas y otro para escrituras. También paso el TcpClient a este objeto también.

Utilicé el TcpClient para realizar el intercambio de información para configurar la conexión SSL. Después de autenticar el servidor o cliente dependiendo de cómo lo estoy usando, entonces uso mis dos MemoryStreams para las lecturas/escrituras de SslStream.

Así que para las escrituras Async, primero escribo mi carga útil en el SslStream que rellena mi MemoryStream para escribir con datos encriptados. Con los datos cifrados de MemoryStream, llenó el búfer SocketAsyncEventArgs y llamó al método TcpClient SendAsync. Para las lecturas, es más o menos lo contrario.

No puedo decir que en particular me emocione mover los datos de esa manera, pero siempre y cuando no permita que los objetos MemoryBuffer sean reasignados constantemente, no es un problema de rendimiento. Al menos de esta manera, puedo usar solo el marco y mi propio código sin depender de software de terceros.