c# - Conectar un cliente a un servidor TCP utilizando TLS 1.2
.net ssl (1)
.Net 4.5.2 es compatible con TLS1.2, pero está deshabilitado de forma predeterminada.
Para habilitarlo tienes que definir explícitamente el conjunto de protocolos de seguridad.
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
Para obtener más información, consulte el siguiente enlace msdn.microsoft.com/en-us/library/…
Intento sin suerte conectar un dispositivo a un servidor .Net (4.5.2). Es una conexión TCP abierta por el dispositivo, que usa TLS 1.2.
- En el lado del servidor, tengo una implementación estándar de .NET de un servidor TCP:
SslStream
envuelto a través de DotNetty - No puedo cambiar nada en el dispositivo
Cualquier cliente .Net puede conectarse exitosamente a mi servidor usando una conexión TLS segura. También funciona al intentar con CURL, por lo que he concluido que mi servidor TCP funciona bien.
Así que comparé (usando Wireshark) lo que fue enviado por un cliente que trabaja de lo que fue enviado por el dispositivo que no puede conectarse. La diferencia significativa que encontré es la ausencia (para el dispositivo) de la Extensión de nombre de servidor (SNI) en el mensaje de saludo del cliente TLS.
Lo siguiente que intenté es enviar datos manualmente a mi servidor mediante Pcap.Net , es decir, enviar manualmente mensajes de Pcap.Net TCP SYN / TCP ACK / Cliente utilizando matrices de bytes sin procesar (datos sin formato que obtuve (gracias a Wireshark) desde el dispositivo que intenta conectarse) a mi servidor). Confirmé que al ajustar la matriz de bytes sin procesar de Hello del Cliente que no funciona al agregar la extensión de Nombre del servidor hace que funcione mi protocolo de enlace TLS.
Obviamente, tengo un problema con los clientes que no incluyen la extensión SNI y un servidor que rechaza el protocolo de enlace si esta información no está presente.
¿Cómo podría cambiar la forma en que mi servidor TCP se comporta para aceptar al cliente que no proporciona la extensión de Nombre de servidor? ¿Es posible, en primer lugar, usar la clase estándar .Net SslStream
?
AFAIK, la extensión SNI no es obligatoria, y es decisión del cliente decidir si usarla o no, por lo que, en teoría , el servidor debe aceptar un mensaje de bienvenida del Cliente sin él.
Cualquier puntero sería muy apreciado.