JAVA请求HTTPS协议

本文详细介绍了使用URLAPI访问HTTPS协议URL的方法,并提供了关键代码示例。重点强调了导入服务端证书到本地可信任密钥库的重要性,以及如何处理自签名证书可能引发的验证错误。此外,还分享了设置系统参数和配置连接HostnameVerifier以避免证书校验失败的技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用url API访问HTTPS协议的url,跟访问普通url一样,url api封装了底层复杂的ssl协议,暴露给上层应用的时候,使用方式跟普通的http请求无异了。需要做的是将服务端证书导入到本地可信任密钥库中。

代码:
System.setProperty("javax.net.ssl.trustStore","E:\\home\\ca\\server.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "qwe123");
URL url = new URL("https://localhost");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(6 * 60 * 1000);
conn.setReadTimeout(10 * 60 * 1000);
InputStream is = conn.getInputStream();
Reader reader = new InputStreamReader(conn.getInputStream(), "UTF-8");
BufferedReader br = new BufferedReader(reader);
String line = null;
do {
line = br.readLine();
System.out.println(line);
} while (line != null);

注意:
System.setProperty("javax.net.ssl.trustStore","E:\\home\\ca\\server.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "qwe123");
设置系统参数可省略,前提是需要把服务器证书导入到$JAVA_HOME/jre/lib/security/cacerts文件中

另 自签名的证书可能会存在证书hostname校验失败的情况:
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching localhost found
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1611)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181)
这就需要设置connection的 HostnameVerifier

class MyHostnameVerifier implements HostnameVerifier {

public boolean verify(String hostname, SSLSession session) {
return true;//不校验 全返回true
}
}

在连接前设置
((HttpsURLConnection) conn).setHostnameVerifier(new MyHostnameVerifier());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值