javax.net.ssl.SSLException: Received fatal alert: protocol_version)
2021/11/18 22:13:43
本文主要是介绍javax.net.ssl.SSLException: Received fatal alert: protocol_version),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本地测试好的程序放到测试环境居然不好使,查阅资料发现是SSL问题,记录一下
SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
原因是: https的请求需要加上ssl的验证,但是代码里一般只用到http,即使用到https也只是换了个前缀,并没有带上ssl验证的过程。
在Java 1.8上,默认TLS协议是v1.2。在Java 1.6和1.7上,默认是已废弃的TLS1.0
@Bean public CloseableHttpClient closeableHttpClient() { X509TrustManager x509TrustManager = new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return null; } }; SSLContext sslContext = null; try { // 此处修改为TLSv1.2 sslContext = SSLContext.getInstance("TLSv1.2"); sslContext.init(null, new TrustManager[] { x509TrustManager }, null); } catch (NoSuchAlgorithmException | KeyManagementException e) { e.printStackTrace(); } SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE); Registry<ConnectionSocketFactory> connectionSocketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create() .register("http", PlainConnectionSocketFactory.INSTANCE) .register("https", sslConnectionSocketFactory).build(); PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(connectionSocketFactoryRegistry); RequestConfig requestConfig = RequestConfig.custom() .setConnectionRequestTimeout(httpClientProperties.getConnectionRequestTimeout()) .setConnectTimeout(httpClientProperties.getConnectTimeout()) .setSocketTimeout(httpClientProperties.getSocketTimeout()) .build(); return HttpClients.custom() .setConnectionManager(poolingHttpClientConnectionManager) .setDefaultRequestConfig(requestConfig) .setMaxConnTotal(httpClientProperties.getMaxConnTotal()) .setMaxConnPerRoute(httpClientProperties.getMaxConnPerRoute()) //.disableDefaultUserAgent() .build(); }
https说明:
SSL/TLS 系列中有六种协议:SSL v2,SSL v3,TLS v1.0,TLS v1.1和TLS v1.2、TLSv1.3:
SSL v2 是不安全的,不能使用。
当与 HTTP(POODLE 攻击)一起使用时,SSL v3 是不安全的,当与其他协议一起使用时,SSL v3 是弱的。它也是过时的,不应该被使用。
TLS v1.0 也是不应该使用的传统协议,但在实践中通常仍然是必需的。其主要弱点(BEAST)在现代浏览器中得到缓解,但其他问题仍然存在。
TLS v1.1 和 v1.2 都没有已知的安全问题,只有 v1.2 提供了现代的加密算法。
TLS v1.2 应该是您的主要协议,因为它是唯一提供现代认证加密(也称为 AEAD)的版本。如果您今天不支持 TLS v1.2,则缺乏安全性。
TLS v1.3在TLS v1.2的基础上,吸收了之前的设计,并且做了大量的改进。相对于TLS v1.2,协议更简洁、更安全、性能也更好。
链接: TLS 1.3 VS TLS 1.2,让你明白 TLS 1.3 的强大.
这篇关于javax.net.ssl.SSLException: Received fatal alert: protocol_version)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#