JAVA https接口调用

项目需要访问https请求但是一直报错No subject alternative names matching IP address XXX found.

随查找各种API,原来https是双向握手,必须指定主机

HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); // conn.setHostnameVerifier(DO_NOT_VERIFY);

URL url = new URL( "https://127.0.0.1/test");

final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() { public boolean verify(String hostname, SSLSession session) { System.out.println(hostname); System.out.println(session.getPeerHost() + ":" + session.getPeerPort()); if (hostname.equals("127.0.0.1")) { return true; } else { return false; } } };

代码中必须对指定主机地址过滤,否则面临很不安全的局面,这里我采用过滤掉我要访问的连接地址IP,返回true即可过滤掉正确的https请求。

附API 

public interfaceHostnameVerifier

此类是用于主机名验证的基接口。

在握手期间,如果 URL 的主机名和服务器的标识主机名不匹配,则验证机制可以回调此接口的实现程序来确定是否应该允许此连接。

策略可以是基于证书的或依赖于其他身份验证方案。

当验证 URL 主机名使用的默认规则失败时使用这些回调。

从以下版本开始:

1.4

方法摘要

 booleanverify(Stringhostname, SSLSessionsession)

验证主机名和服务器身份验证方案的匹配是可接受的。


方法详细信息

verify

booleanverify(Stringhostname,SSLSessionsession)

验证主机名和服务器身份验证方案的匹配是可接受的。

参数:

hostname - 主机名

session - 到主机的连接上使用的 SSLSession

返回:

如果主机名是可接受的,则返回 true

你可能感兴趣的:(JAVA https接口调用)