Saltar al contenido

C # HttpWebRequest La conexión subyacente se cerró: se produjo un error inesperado en un envío

Solución:

En la versión 4.0 del marco .Net, el ServicePointManager.SecurityProtocol solo ofrece dos opciones para configurar:

  • Ssl3: protocolo de seguridad Secure Socket Layer (SSL) 3.0.
  • Tls: protocolo de seguridad Transport Layer Security (TLS) 1.0

En la próxima versión del marco, SecurityProtocolType El enumerador se amplió con los protocolos Tls más nuevos, por lo que si su aplicación puede usar la versión 4.5, también puede usar:

  • Tls11: especifica el protocolo de seguridad Transport Layer Security (TLS) 1.1
  • Tls12: especifica el protocolo de seguridad Transport Layer Security (TLS) 1.2.

Entonces, si está en .Net 4.5, cambie su línea

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

para

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

para que ServicePointManager cree flujos que admitan conexiones Tls12.

Tenga en cuenta que los valores de enumeración se pueden usar como indicadores para que pueda combinar varios protocolos con un OR lógico

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | 
                                       SecurityProtocolType.Tls11 |
                                       SecurityProtocolType.Tls12;

Nota

Intente mantener el número de protocolos que admite lo más bajo posible y actualizado con los estándares de seguridad actuales. Ssll3 ya no se considera seguro y el uso de Tls1.0 SecurityProtocolType.Tls está en declive.

Experimenté esta excepción, y también estaba relacionada con ServicePointManager.SecurityProtocol.

Para mi, esto fue porque ServicePointManager.SecurityProtocol había sido configurado para Tls | Tls11 (debido a ciertos sitios web que la aplicación visita con TLS 1.2 roto) y al visitar un sitio web solo para TLS 1.2 (probado con el Informe SSL de SSLLabs), falló.

Una opción para .NET 4.5 y superior es habilitar todas las versiones de TLS:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
                                     | SecurityProtocolType.Tls11
                                     | SecurityProtocolType.Tls12;

Para el uso de .Net 4:

ServicePointManager.SecurityProtocol = (SecurityProtocolType)768 | (SecurityProtocolType)3072;
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *