微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java 1.7.0_67 api 连接

如何解决Java 1.7.0_67 api 连接

我使用的是 Java 版本 1.7.0_67 并希望与使用 TLS_v1.2 协议和密码套件的外部 API https://www.ngdc.noaa.gov/ 通信:

  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1)
  • TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048)
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp256r1)
  • TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 2048)

我通过更新 https://www.oracle.com/java/technologies/javase-jce-all-downloads.html

在 Java 中启用了更强大的算法版本

请求示例: https://www.ngdc.noaa.gov/geomag-web/calculators/calculateDeclination?lat1=40&lon1=-50&resultFormat=json&startYear=2015&startMonth=01&startDay=01&model=IGRF

当直接使用 Intellij Idea(运行程序,调试程序)时,我得到代码 200 的响应,但是当构建 jar 并使用相同的 java 运行时,我得到“handshake_failure (40)”。 这是来自 console output

的快照

此外,我使用 BouncyCastleJsseProvider 作为 Java 的安全提供程序。否则,即使通过 Intellij 运行/调试也无法正常工作。

我的代码

public class App {

public static void main(String[] args) throws Exception {

    Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME);
    Security.removeProvider(BouncyCastleJsseProvider.PROVIDER_NAME);
    Security.insertProviderAt(new BouncyCastleProvider(),1);
    Security.insertProviderAt(new BouncyCastleJsseProvider(),1);

    String httpsURL = "https://www.ngdc.noaa.gov/geomag-web/calculators/calculateDeclination?lat1=41.000485&lon1=-77.938029&resultFormat=json&startYear=2012&startMonth=01&startDay=10&model=IGRF";
    URL url = new URL(httpsURL);
    SSLContext context = SSLContext.getInstance("TLS","BCJSSE");
    context.init(null,null,null);
    SSLSocketFactory fact = context.getSocketFactory();
    System.out.println(System.getProperty("java.version"));

    OkHttpClient client = new OkHttpClient().newBuilder()
            .addInterceptor(new SSLHandshakeInterceptor())
            .hostnameVerifier(new HostnameVerifier() {
                public boolean verify(String ss,SSLSession sslSession) {
                    return true;
                }
            })
            .build();

    Request request = new Request.Builder()
            .url(httpsURL)
            .build();
    Response response = client.newCall(request).execute();
}

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。