【发布时间】:2018-10-03 00:26:08
【问题描述】:
我正在尝试通过 https 连接到服务器,Android 无法将证书识别为“受信任”,因此出现以下异常:
javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:
Trust anchor for certification path not found.
为了解决这个问题,我在应用程序(资产文件夹)中包含了证书,并使用它来验证服务器证书。
我使用一个名为 CustomSSLSocketFactory 的类来执行此操作,它在其中读取证书并在 https 连接期间进行验证过程没有问题。
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(CustomSSLSocketFactory.getSSLSocketFactory(context));
现在我不得不重复这个过程但是使用exoplayer2播放hlsvideo,经过几天的调查我没有实现。
private MediaSource buildMediaSourceHlsMedia(Uri uri) throws MalformedURLException {
String UserAgent = Util.getUserAgent(getContext (), getResources().getString(R.string.app_name));
int minLoadableRetryCount;
DefaultHttpDataSourceFactory dataSourceFactory =new DefaultHttpDataSourceFactory( UserAgent,BANDWIDTH_METER,DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS, DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS,true);
dataSourceConHeader(dataSourceFactory,uri.toString(),mParam4);
MediaSource ms= new HlsMediaSource.Factory(dataSourceFactory).setMinLoadableRetryCount(5).createMediaSource(uri);
return ms;
}
我想有必要编写一个自定义数据源,但几天后,我无法实现。我不知道怎么做。
我想我必须包含在自定义数据源中,(以及其余必要的代码):conn.setSSLSocketFactory(CustomSSLSocketFactory.getSSLSocketFactory(context));
有人可以指导我吗?谢谢
【问题讨论】:
标签: ssl datasource exoplayer sslhandshakeexception