https请求异常引发(Received fatal alert: unrecognized_name):如何快速解决项目中问题?

这篇具有很好参考价值的文章主要介绍了https请求异常引发(Received fatal alert: unrecognized_name):如何快速解决项目中问题?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

总结思考:如何做一个出色的开发者?

首先我们要承认我们大部分程序员是应用开发,不是操作系统、协议、框架开发等这类底层开发者

其一:是否能快速定位问题。如找到出现问题的代码,bug出现在哪一行,哪个应用上。只有找到问题才能解决问题。

其二:也是本篇文章中遇到的问题,如何快速解决问题。

本篇文章中遇到的问题个人觉得算是奇葩问题,首先代码没大问题,也许涉及到https本质问题,确实没有解决这方面问题的经验和能力。但是这个问题前前后后解决了快3天,这个时间不敢恭维。回头想一下遇到这种问题,尝试了几种方式不行就果断放弃没有必要深究这个问题的本质(并不是不让你深究,解决项目问题是首要问题,有时间还是要研究一下的,这是程序员的精神追求),直接换开发语言先把问题解决

起因

调用一个第三方接口突然异常了(本来好好的)。异常如下:

Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: unrecognized_name
        at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
        at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
        at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2020)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1127)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
        at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1340)
        at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1315)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:264)
        at cn.hutool.http.HttpConnection.getOutputStream(HttpConnection.java:451)
        at cn.hutool.http.HttpRequest.sendFormUrlEncoded(HttpRequest.java:1176)
        at cn.hutool.http.HttpRequest.send(HttpRequest.java:1145)
        ... 16 common frames omitted

然后就开始了我的查找过程

1、 首先在本地尝试了一下请求正常(咦,本地正常,线上不行。奇怪)。直接排除第三方接口本身的问题。

2、 跳过https验证(因为之前遇到了很多这种https的相关验证问题,都是通过该方式解决的)

    /**
     * 跳过ssl认证
     */
    public static void skipSSL() {
        try {
            //  直接通过主机认证
            HostnameVerifier hv = new HostnameVerifier() {
                @Override
                public boolean verify(String urlHostName, SSLSession session) {
                    return true;
                }
            };
            //  配置认证管理器
            javax.net.ssl.TrustManager[] trustAllCerts = {new TrustAllTrustManager()};
            SSLContext sc = SSLContext.getInstance("TLS");
            SSLSessionContext sslsc = sc.getServerSessionContext();
            sslsc.setSessionTimeout(0);
            sc.init(null, trustAllCerts, null);
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
            //  激活主机认证
            HttpsURLConnection.setDefaultHostnameVerifier(hv);
        } catch (Exception e) {
            ExceptionUtil.printStackTrace(log, e);
            throw new RuntimeException(e.getMessage());
        }
    }

3、 设置java中的https协议相关属性

代码中添加:System.setProperty ("jsse.enableSNIExtension", "false");
或启动命令添加: -Djsse.enableSNIExtension=false

尝试了以上方式未解决问题,迷茫了。开始了继续验证其他猜想之路。

1、 换了各种http请求的工具类(apache、okhttp、java原生的httpconnection等)。不行

2、 会不会是机器相关的限制。换了机器,不行

3、 会不会是操作系统导致的相关问题。尝试linux和windows(都是java应用),不行

4、 会不会是应用导致的。用nginx进行接口转发,不行

到这里人已经疯了,欲哭无泪呀。出现这个问题到现在不断猜想验证已经两天过去了。还好这个问题当时影响不是很严重。

继续验证之路

猜想会不会是因为java使用了docker,跟容器中的环境有关系。但是感觉已经没有必要验证这些东西了,如果确实docker容器有关系,那我也解决不了(以我现在的能力是解决不了docker相关问题的,涉及的东西太多了)。

最后直接换开发语言,联系了我们前端同事,部署了一个node版本的第三方接口转发应用。替换搞定。文章来源地址https://www.toymoban.com/news/detail-685518.html

注:如哪位同事尝试了不同方式并解决问题。或对这个问题有什么其他理解的可以分享到评论中。

到了这里,关于https请求异常引发(Received fatal alert: unrecognized_name):如何快速解决项目中问题?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • javax.net.ssl.SSLException: Received fatal alert: protocol_version解决

    今天在开发过程中,调用一个https的接口引发错误 在Java 1.8上,默认TLS协议是v1.2。在Java 1.6和1.7上,默认是已废弃的TLS1.0,由于此项目使用的是jdk1.6,因此引发错误。 解决方法1: 在发起请求前面设置 TLSv1.2 协议 解决方法2: 在发起请求前忽略ssl认证: 工具类: 使用方法:

    2024年02月11日
    浏览(53)
  • Caused by: javax.net.ssl.SSLException: Received fatal alert: protocol_version

        at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1575)     at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:854)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     

    2024年02月06日
    浏览(54)
  • Java(92):javax.net.ssl.SSLException:Received fatal alert: protocol_version的解决方法

    2022-05-19 15:11:56 [ERROR] com.cipherxxx.utils.HttpsClientUtils - javax.net.ssl.SSLException: Received fatal alert: protocol_version 在Java 1.8上,默认TLS协议是v1.2。在Java 1.6和1.7上,默认是已废弃的TLS1.0,由于此项目使用的是jdk1.6,因此引发错误。 ------------------------------------------------------------- 服务端的

    2024年02月16日
    浏览(34)
  • netty整合websocket支持自签证书出现netty websocket ssl Received fatal alert: certificate_unknown

    win+r cmd 生成自己jks文件,指向自己要生成jks的文件位置下,我直接生成到项目resources下 2.生成证书 3.迁移到行业标志 成功生成证书 将jks文件考入项目resources下 yaml配置: netty证书加载 这里我就只上关键代码了 不添加信任netty websocket ssl Received fatal alert: certificate_unknown。 错误原

    2024年02月02日
    浏览(43)
  • java 连接mysql,出现 Caused by: javax.net.ssl.SSLException: Received fatal alert: internal_error 错误

    问题 在本地部署tomcat项目时,卡在了“Caused by: javax.net.ssl.SSLException: Received fatal alert: internal_error” 排查         查了资料发现在MySQL5.7.41及之前的版本,安全性较低,存在任何用户都可以连接上的 test 库,所以官方在5.7.43版本加大了对隐私的保护。并且采用了默认 useSS

    2024年03月13日
    浏览(68)
  • kettle工具连接MySQL数据库报错 Caused by: javax.net.ssl.SSLException: Received fatal alert: internal_error

            前几天为了修复MySQL数据库漏洞,项目上从5.7.41版本升级到了5.7.43,今天在使用kettle时发现数据库突然连不上了,测试连接报如下错误:            Error connecting to database: (using class org.gjt.mm.mysql.Driver) Communications link failure The last packet successfully received from the serve

    2024年02月06日
    浏览(51)
  • 异常排查 | 重复Cookie访问导致HTTP请求引发空指针异常

    近几日,遇到一个困惑了我很久的异常,是浏览器页面向Tomcat服务器发起HTTP请求时,服务器发还回来的一处异常 首先来说一下我是在做什么的过程中遇到这个问题 现在我需要实现一个监听器,去监听在线用户人数,也去 实时记录一下当前这个页面中有多少用户在线 ,这一

    2024年02月08日
    浏览(48)
  • 抓包https请求网络异常/无数据怎么破?

    当你测试App的时候,想要通过Fiddler/Charles等工具抓包看下https请求的数据情况,发现大部分的App都提示网络异常/无数据等等信息。 以“贝壳找房”为例: Fiddler中看到的请求是这样的:   你可能开始找证书的问题:是不是Fiddler/Charles的证书没有导入的手机中去?配置一遍又一

    2024年02月02日
    浏览(37)
  • 【异常】客户端发起HTTPS请求报错,服务端返回400 Bad Request ,并且提示No required SSL certificate was sent

    HTTP响应码400表示客户端发送了一个无效的请求。这可能是由于请求中缺少必需的参数或格式不正确等原因导致的。服务器无法处理此请求并返回400响应码。如果您正在编写Web应用程序,建议在处理请求时检查请求的有效性,并在必要时返回400响应码以指示客户端请求无效。

    2024年02月11日
    浏览(54)
  • 深度复盘-重启 etcd 引发的异常

    作者信息: 唐聪、王超凡,腾讯云原生产品中心技术专家,负责腾讯云大规模 TKE 集群和 etcd 控制面稳定性、性能和成本优化工作。 王子勇,腾讯云专家级工程师, 腾讯云计算产品技术服务专家团队负责人。 作为当前中国广泛使用的云视频会议产品,腾讯会议已服务超过

    2024年02月02日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包