在i-jetty中发起https请求失败:java.security.NoSuchProviderException: SunJSSE

当web项目在tomcat中启动时,可以正确得建立https链接,发起请求并获得响应。

但是把web项目放到手机上使用i-jetty启动时,发起https请求失败。

 

检查后发现在建立SSLContext时报错:java.security.NoSuchProviderException: SunJSSE

 

建立SSLContext的代码为:

 

SSLContext sslContext = SSLContext.getInstance("SSL",”SunJSSE”);

 

 

查看JDK API:


getInstance

public static SSLContext getInstance(String protocol,
                                     String provider)
                              throws NoSuchAlgorithmException,
                                     NoSuchProviderException
返回实现指定安全套接字协议的 SSLContext 对象。

返回一个封装 SSLContextSpi 实现的新 SSLContext 对象,该实现取自指定的提供者。指定的提供者必须在安全提供者列表中注册。

注意,可以通过 Security.getProviders() 方法获取已注册提供者列表。

参数:
protocol - 所请求协议的标准名称。有关标准协议名称的信息,请参见 Java Secure Socket Extension Reference Guide 的附录 A。
provider - 提供者的名称。
返回:
新的 SSLContext 对象。
抛出:
NoSuchAlgorithmException - 如果不能从指定提供者获得指定协议的 SSLContextSpi 实现。
NoSuchProviderException - 如果指定提供者未在安全提供者列表中注册。
IllegalArgumentException - 如果提供者的名称为 null 或空。
另请参见:
Provider

所以报错的原因应该是”SunJSSE“在Android环境下是没有注册的提供者,所以无法建立SSLContext。

 

继续查看JDK API,发现:


getInstance

public static SSLContext getInstance(String protocol)
                              throws NoSuchAlgorithmException
返回实现指定安全套接字协议的 SSLContext 对象。

此方法从首选提供者开始遍历已注册安全提供者列表。返回一个封装 SSLContextSpi 实现的新 SSLContext 对象,该实现取自支持指定协议的第一个提供者。

注意,可以通过 Security.getProviders() 方法获取已注册提供者列表。

参数:
protocol - 所请求协议的标准名称。有关标准协议名称的信息,请参见 Java Secure Socket Extension Reference Guide 的附录 A。
返回:
新的 SSLContext 对象。
抛出:
NoSuchAlgorithmException - 如果没有提供者支持指定协议的 TrustManagerFactorySpi 实现。
另请参见:
Provider
所以代码改为:
SSLContext sslContext = SSLContext.getInstance("SSL");
这样会自动调用Security.getProviders()获取已经注册的提供者。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值