SSLException异常解读与解决

本文解析了在使用HTTPS协议访问网站API时遇到的SSLException异常,介绍了HTTPS与HTTP的主要区别,并提供了一种解决方案来处理此类异常。

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

在读取一个比较有影响力的网站的API的时候,由于对方采用的是HTTPS的链接,而不是HTTP的链接,所以导致了如下的问题:

javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair
原本以为两者是一样的访问方式,所以出错主要还是在于自己,当然在没找到原因之前并没有向这个方面去想,这也是后来才意识到的。


概念与理解


HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。--百度百科


个人的理解是:这个HTTPS本质上还是基于TCP/IP协议的,但是又加入了一个为了安全起见的SSL,这个SSL主要的作用在于安全,对传输过程中的数据进行加密。提供一个身份验证和密码通讯的方法。

HTTPS和HTTP的区别主要为以下四点:

一、https协议需要到ca申请证书,一般免费证书很少,需要交费。
二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
转载请注明出处:SSLException异常解读与解决

解决方案

HttpUtils中:
public static String getData(String url) {
		
		CloseableHttpClient client = SSLUtils.createSSLClientDefault();
		HttpGet getMethod = new HttpGet();
		try {
			getMethod.setURI(new URI(url));
			HttpResponse response = client.execute(getMethod);
			
			HttpEntity entity = response.getEntity();
			String data = EntityUtils.toString(entity);
			return data;
		} catch (Exception e) {
			log.error("HttpUtilsError");
		} 
		return "";
	}

SSLUtils类
public static CloseableHttpClient createSSLClientDefault() {
		try {
			SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
				// 信任所有
				@Override
				public boolean isTrusted(X509Certificate[] chain, String authType) {
					return true;
				}
			}).build();
			SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
			return HttpClients.custom().setSSLSocketFactory(sslsf).build();
		} catch (KeyManagementException e) {
			log.error("SSLUtilsErrorKetManage");
		} catch (NoSuchAlgorithmException e) {
			log.error("SSLUtilsErrorNOAlgorithm");
		} catch (KeyStoreException e) {
			log.error("SSLUtilsErrorKeyStore");
		}
		return HttpClients.createDefault();
	}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值