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;