java8 https,在Java 8中可以使用HttpsURLConnection来发送服务器名称指示(SNI)

Oracle文档似乎表明

Java 8默认自动发送SNI. Wireshark另有说明.我是一个PowerShell系统管理员,而不是Java开发人员,所以我几乎可以肯定我忽略了一些东西.

与适当的信任密钥库一起使用时,以下代码从所有不需要SNI的SSL网站返回状态200.连接到多主机Apache服务器的默认SSL网站时,它也可以很好地返回.但是,当要求连接到非默认站点时,由于证书名称与站点名称不匹配,因此它无法连接到默认站点.

import java.util.*;

import java.net.*;

import javax.net.ssl.*;

import java.io.*;

public class testJavaHttpConn {

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

String strUrl = args[0];

System.out.println("Trying to connect to " + strUrl);

try {

URL url = new URL(strUrl);

HttpsURLConnection urlConn = (HttpsURLConnection) url.openConnection();

System.out.println("Connecting");

urlConn.connect();

System.out.println("Done");

System.out.println("Response " + urlConn.getResponseCode());

} catch (IOException e) {

System.err.println("Error creating HTTP connection");

e.printStackTrace();

throw e;

}

}

}

我没有设置System.setProperty(“jsse.enableSNIExtension”,“false”);当我设置-Djavax.net.debug = ssl时,它清楚地显示未设置服务器名称扩展名.

我知道我可以实现一个SSLSocket并设置SSLParameter serverName,如果我愿意深入到下一个更深层次的抽象层,但我想避免这种情况.

编辑:代码在注释中按照上面的Flo编写.对于我来说,Linux 2.6.18-194.11.3.el5上的1.8.0_72和Windows 7上的1.8.0_51都失败了.Windows安装是vanilla,而Linux安装已将urandom值更新为securerandom.source = file: /dev/./urandom.我不知道如何确定我的装置与Flo的不同之处.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值