java1.7访问https Remote host closed connection during handshake

在使用new DefaultHttpClient(ClientConnectionManager clientConnectionManager)之前对clientConnectionManager进行初始化改造。

示例代码如下(重新定义一个DefaultHttpClient的子类。使用时new一个新的实例然后执行init方法,也可将初始化方法放在每个具体执行方法中):

public class HttpsUtil extends DefaultHttpClient {

    public final static String HTTPGET = "GET";
    public final static String HTTPPUT = "PUT";
    public final static String HTTPPOST = "POST";
    public final static String HTTPDELETE = "DELETE";
    public final static String HTTPACCEPT = "Accept";
    public final static String CONTENT_LENGTH = "Content-Length";
    public final static String CHARSET_UTF8 = "UTF-8";
    private static HttpClient httpClient;

    public void init() throws Exception {
        String base_Path = "/Users/jinx/Documents/jobs/git_mine/base/base";// 存放证书文件夹位置 
        String selfcertpath = base_Path + "ca.jks";//自身cert
        String trustcapath = base_Path + "outgoing.CertwithKey.pkcs12"; //授信cert

        KeyStore selfCert = KeyStore.getInstance("pkcs12");
        selfCert.load(new FileInputStream(selfcertpath), Constant.SELFCERTPWD.toCharArray());
        KeyManagerFactory kmf = KeyManagerFactory.getInstance("sunx509");
        kmf.init(selfCert, Constant.SELFCERTPWD.toCharArray());
        KeyStore caCert = KeyStore.getInstance("jks");
        caCert.load(new FileInputStream(trustcapath), Constant.TRUSTCAPWD.toCharArray());
        TrustManagerFactory tmf = TrustManagerFactory.getInstance("sunx509");
        tmf.init(caCert);
        SSLContext sc = SSLContext.getInstance("TLSv1.2");//重点是这里,JDK1.8使用TLS即可,jdk1.7使用TLSv1.2
        sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
        SSLSocketFactory ssf = new SSLSocketFactory(sc, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
        ClientConnectionManager ccm = this.getConnectionManager();
        SchemeRegistry sr = ccm.getSchemeRegistry();
        sr.register(new Scheme("https", "端口", ssf));

        httpClient = new DefaultHttpClient(ccm);

    }

}
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URISyntaxException;
import java.security.KeyStore;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.ContentBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSON;


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java 1.7是一种编程语言和计算机平台,可用于开发各种应用程序和系统。它是Java语言的一个版本,于2011年发布。 ARM64是一种64位的处理器架构,通常在移动设备和嵌入式系统中使用。ARM64处理器提供更高的性能和更低的功耗。 Java 1.7可以在ARM64架构上运行,并针对该架构进行了优化。这意味着开发者可以使用Java 1.7版本来开发在ARM64设备上运行的应用程序。 Java 1.7为ARM64架构提供了许多功能和特性。其中包括对第三方库和API的支持,使开发者能够轻松集成和使用各种功能和服务。 对于开发者而言,使用Java 1.7 ARM64意味着他们可以编写能够在ARM64设备上高效运行的代码。这样可以充分利用ARM64架构的优势,提升应用程序的性能和响应速度。 另外,Java 1.7也提供了一些在ARM64平台上进行优化和测试的工具和库。这些工具和库可帮助开发者确保其应用程序在ARM64设备上的稳定性和兼容性。 总的来说,Java 1.7 ARM64是Java语言的一个特定版本,用于在ARM64设备上开发高性能和兼容性的应用程序。它为开发者提供了许多功能和优化,以便更好地利用ARM64架构的性能和能力。 ### 回答2: Java 1.7是Oracle公司发布的一种编程语言和计算机技术,它基于虚拟机的原理,能够实现跨平台的特性。ARM64是一种基于ARM架构的64位处理器指令集,具有更高的计算能力和更低的能耗。 Java 1.7版本在ARM64架构上的应用主要体现在移动设备和嵌入式平台上。由于ARM架构在移动设备上的普及度较高,Java 1.7版本的适配对于移动应用开发具有重要意义。Java 1.7在ARM64架构上的运行环境能够为开发者提供良好的编程体验和高性能的运行效果。 Java 1.7版本的ARM64支持了在嵌入式系统上的应用。嵌入式系统需要求低功耗、高效能和稳定性,Java 1.7版本的适配能够满足这些需求,为嵌入式系统的开发和运行提供了更好的选择。 虽然Java 1.7版本在ARM64架构上有一定的适配,但由于Java编程语言和虚拟机的特性,对于特定的应用场景和需求,可能会有更合适的选择。考虑到ARM64架构的特点,可能更推荐使用更新的Java版本或者其他更适合ARM64架构的编程语言。 综上所述,Java 1.7版本在ARM64架构上是可行的,并能够为移动设备和嵌入式系统提供高效、稳定和低功耗的解决方案。然而,对于特定的应用场景和需求,需要综合考虑Java版本、编程语言和架构特性,选择最合适的解决方案。 ### 回答3: Java 1.7是Java编程语言的一个版本,而ARM64是一种基于ARM架构的64位处理器。 Java 1.7是Oracle公司在2011年发布的一个主要版本,它带来了很多新特性和改进。此版本的最重要的新功能之一是对动态语言的支持,通过引入了动态类型语言支持(JSR-292),Java 1.7使得Java能够更好地集成和与动态语言进行互操作。 ARM64是ARM体系结构的64位变种。ARM架构是一种常用的指令集架构,广泛应用于移动设备和嵌入式系统、单片机等领域。与传统的32位ARM架构相比,ARM64架构具有更大的寻址空间和更高的性能。 通过将Java 1.7与ARM64结合使用,可以将Java应用程序直接运行在基于ARM64架构的设备上。Java 1.7在ARM64架构上的执行效率可能会更高,因为ARM64具有更高的性能和更大的寻址空间。同时,Java 1.7的动态语言功能也可以为ARM64架构上的动态语言提供更好的支持。 总而言之,Java 1.7 ARM64结合可以为开发人员提供更好的工具和平台来开发和运行应用程序,特别是在基于ARM64架构的设备上。这对于移动设备、嵌入式系统和其他ARM64架构应用的开发和部署都具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值