当前位置: 首页 > 知识库问答 >
问题:

使用vertx HttpClient连接到https url时,vertx ssl握手失败

柯子琪
2023-03-14

当我尝试连接https url时...我得到ssl握手失败...我使用vertx-version

 This code is working fine, giving me proper response..

     URL url = new  URL("https://bugzilla.mozilla.org/rest/bug/707428/comment");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setDoOutput(true);
    conn.setRequestMethod("GET");
    conn.setRequestProperty("accept", "application/json");
    InputStream is=conn.getInputStream();
    InputStreamReader isr=new InputStreamReader(is);
    BufferedReader br=new BufferedReader(isr);
    String str=null;
    while((str=br.readLine())!=null){
        System.out.println(str);
    }
    conn.disconnect();     

但是在使用vertx的时候。这是握手的问题

 HttpClient client = MyServer.defaultVertx.createHttpClient().setSSL(true).setTrustAll(true)
                .setHost("bugzilla.mozilla.org").setPort(443).setVerifyHost(false);

        HttpClientRequest request= client.request("GET","/rest/bug/707428/comment",new Handler<HttpClientResponse>() {

            @Override
            public void handle(HttpClientResponse cRes) {
                System.out.println(" HttpClientResponse Done.."+cRes);
                cRes.bodyHandler(new Handler<Buffer>() {
                    @Override
                    public void handle(Buffer data) {
                        System.out.println("Response (" + data.length() + "): ");
                        System.out.println("Response  >>" +data.getString(0, data.length()));
                    }
                });

                cRes.dataHandler(new Handler<Buffer>() {
                    @Override
                    public void handle(Buffer data) {
                        System.out.println("data Handler (" + data.length() + "): ");
                        System.out.println("data Handler<>>  "+data.getString(0, data.length()));
                    }
                });

                cRes.exceptionHandler(new Handler<Throwable>() {
                    @Override
                    public void handle(Throwable arg0) {
                        arg0.printStackTrace();
                    }
                });
            }
        });

        request.exceptionHandler(new Handler<Throwable>() {
            @Override
            public void handle(Throwable arg0) {
                // TODO Auto-generated method stub
                arg0.printStackTrace();
            }
        });
        request.end();
        client.close();




 javax.net.ssl.SSLException: Received fatal alert: handshake_failure
           at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
           at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1619)
           at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1587)
           at sun.security.ssl.SSLEngineImpl.recvAlert(SSLEngineImpl.java:1756)
           at sun.security.ssl.SSLEngineImpl.readRecord(SSLEngineImpl.java:1060)
           at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:884)
           at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:758)
           at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
           at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1001)
           at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:927)
           at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:873)
           at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:241)
           at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:149)
           at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333)
           at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319)
           at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787)
           at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:125)
           at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511)
           at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)
           at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)
           at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
           at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
           at java.lang.Thread.run(Thread.java:745)

共有2个答案

米元凯
2023-03-14

代码示例连接到端口433,而HTTPS监听443。我的猜测是你的问题中的一个错别字,否则你不会得到SSL握手失败。

您的代码看起来很好,甚至应该能够处理自签名SSL证书。我怀疑这是bugzilla.mozilla.org的特定SSL设置与Vert. x 2中的HTTP客户端实现相结合的问题。您可以通过访问另一个主机(例如https://google.com)来检查这一点。

可能的原因是 mozilla.org 上的 SSL 设置需要 SNI(服务器名称指示),并且 Vert.x HTTPClient 默认情况下不发送此内容。

拓拔泉
2023-03-14

很难确定此异常的确切问题。
它可能是不兼容的密码,缺少JCE策略jar,SSL版本问题等。

我建议启用与连接相关的问题的调试,以查看究竟出了什么问题。

-Djavax.net.debug=所有

有关更多信息,请参阅此链接

 类似资料:
  • 我们很难与远程机器(如PayPal vb)建立https连接谁从我们的系统中禁用了SSL3协议。Net应用程序。HttpWebRequest实例的GetResponse方法出现以下异常。 请求被中止:无法创建SSL/TLS安全通道。 当我们使用WireShark深入并跟踪网络日志时,我们看到远程机器返回以下错误 TLSv1。2警报(级别:致命,描述:握手失败)握手失败40 更有趣的情况是,当我尝试

  • 我正在尝试编写一个JAVA程序来连接到JIRA REST API。我使用与此类似的代码通过我的证书连接到其他服务: 我得到一个错误: main,处理异常: javax.net.ssl.SSLHandshakeException: Received fatal alter: handshake_failure javax.net.ssl.SSLHandshakeExcepitp: Received

  • 我试图抓取一个网页(这一个)使用J汤库。在执行简单的GET操作时,我得到了以下异常: 这是JsoupParser的内容。解析方法: 起初,我认为这是由于缺少密码套件造成的,但后来我发现这个异常是由于JDK 1.8u141之前版本中的一个错误造成的。我尝试使用JDK1.8u191,一切正常,但是当我使用JDK11时,上面的异常再次出现。我还缺什么吗?谢谢你的帮助。 当我使用早期访问jdk 12时,这

  • 目前我使用的是Java7,我无法连接到LDAPS。我尝试了下面的代码,但仍然无法连接: 2018-04-10 15:21:23,446 INFO[stdout](EJB default-1)EJB default-1,write:TLSV1.2握手,长度=221 2018-04-10 15:21:23,446 INFO[stdout](EJB default-1)EJB default-1,rea

  • 我使用vert. x java客户端连接安慰服务器。当使用SSL证书进行连接时,收到以下SSL握手错误。我在代码中使用setTrust all(true)。有人能帮助解释错误的原因和解决方案吗? 以下是错误:SEVERE:未处理的异常java.lang.IllegalStateExctive:桥没有成功启动io.vertx.amqpbridge.impl.AmqpBridgeImpl.create

  • 在这个基于Xcode7(beta)构建的应用程序中,TCP套接字连接(NSStream)失败,错误如下。 在info.plist中,我还包括了以下相关异常的ATS。 但在下面的委托中 -(void)stream:(NSStream*)stream HandleEvent:(NSStreamEvent)eventCode 我得到的事件代码为8,表示错误发生。具有上述描述。 验证错误:num=19:证