creator1.4, 小米5s,,热更里配置 https, 出现 certificate for<cdn.qiyimofang.com> doesn't match any of the subject alternative names:[*.ucd1.pp.uc.cn] 异常

creator1.4, 小米5s,热更里配置 https, 出现
javax.net.ssl.SSLException: certificate for << cdn.qiyimofang.com >> doesn’t match any of the subject alternative names:[*.ucd1.pp.uc.cn] 异常

ssl 证书是阿里云买的, 直接用 chrome 浏览器访问 热更要访问的配置文件是 绿色的, 可以正常访问,
用手机的浏览器也是正常的

这个是什么问题, 怎么跟 uc.cn扯上关系?
如何解决?
@minggo @dumganhar
求各大神关注

ios上正常, 那应该是安卓这边哪里出问题了??

@panda creator的热更新有什么特殊吗?

这个问题真的不知道怎么回事,@dumganhar 有没有想法?

安卓代码
Cocos2dxDownloader.java
这个文件中, 使用的是 com.loopj.android.http.AsyncHttpClient; 做具体的 http请求,
但看代码, 好像只是 private AsyncHttpClient _httpClient = new AsyncHttpClient();
并没有设置 ssl 相关的参数,
据说是要这样的
//AsyncHttpClient asycnHttpClient = new AsyncHttpClient(); //请求http的方式
AsyncHttpClient asycnHttpClient = new AsyncHttpClient(true, 80, 443);//请求https的方式

而你们代码跟ssl相关的只有
downloader._httpClient.allowRetryExceptionClass(javax.net.ssl.SSLException.class);

导致一直重试, 热更不到就算了, 还一直卡在那
@panda

应该是没做处理。。。
建了个issue:

https://github.com/cocos2d/cocos2d-x/issues/17473

@111650, 我测试了Downloader,发现可以下载https的资源。
https://cct.ccsize.com/1.tar.gz

能否提供一下你的资源地址?我这里再测试一下。

@dumganhar
https://cdn.qiyimofang.com/vegetables/ssl/project.manifest

03-10 15:02:40.810 17604-21432/org.cocos2dx.cpp_tests D/cjh: download: https://cdn.qiyimofang.com/vegetables/ssl/project.manifest
03-10 15:02:40.969 17604-17604/org.cocos2dx.cpp_tests D/Cocos2dxDownloader: onSuccess(i:200 headers:[Lcz.msebera.android.httpclient.Header;@cc733b9 file:/data/user/0/org.cocos2dx.cpp_tests/files/CppTests/DownloaderTest/big file.tmp

我测试了,你这个文件可以下载的。我没修改任何Downloader相关的代码。

试下热更全套?

你能确认一下,是所有文件的下载都有问题,还是就特殊文件?
我这里确认了Downloader没有问题。

我这边确认了
就安卓有问题, 这是样例里的,
只是把最后一个下载大文件的链接, 改成 https://cdn.qiyimofang.com/vegetables/ssl/project.manifest

其它三个测试是通过的

@dumganhar

那你修改为如下的方式,能够正常么?

好诡异,我这里下载都正常的。

能否切换到4G网络再试试?

换成
AsyncHttpClient asycnHttpClient = new AsyncHttpClient(true, 80, 443);//请求https的方式
就可以了 包括http

我是用小米设备 测试的
原来的 AsyncHttpClient asycnHttpClient = new AsyncHttpClient()
wifi 4g都一样的结果, 报一样的错误
@dumganhar

https://github.com/loopj/android-async-http/blob/master/library/src/main/java/com/loopj/android/http/AsyncHttpClient.java
差别就在 fixNoHttpResponseException 这个参数 是true, 还是false

/**
* Creates a new AsyncHttpClient with default constructor arguments values
*/
public AsyncHttpClient() {
this(false, 80, 443);
}

/**
 * Creates a new AsyncHttpClient.
 *
 * @param httpPort non-standard HTTP-only port
 */
public AsyncHttpClient(int httpPort) {
    this(false, httpPort, 443);
}

/**
 * Creates a new AsyncHttpClient.
 *
 * @param httpPort  non-standard HTTP-only port
 * @param httpsPort non-standard HTTPS-only port
 */
public AsyncHttpClient(int httpPort, int httpsPort) {
    this(false, httpPort, httpsPort);
}

/**
 * Creates new AsyncHttpClient using given params
 *
 * @param fixNoHttpResponseException Whether to fix issue or not, by omitting SSL verification
 * @param httpPort                   HTTP port to be used, must be greater than 0
 * @param httpsPort                  HTTPS port to be used, must be greater than 0
 */
public AsyncHttpClient(boolean fixNoHttpResponseException, int httpPort, int httpsPort) {
    this(getDefaultSchemeRegistry(fixNoHttpResponseException, httpPort, httpsPort));
}

可能是证书的的问题吧,

fixNoHttpResponseException Whether to fix issue or not, by omitting SSL verification

ssl证书验证不通过。

不过报的错好奇怪
javax.net.ssl.SSLException: certificate for << cdn.qiyimofang.com >> doesn’t match any of the subject alternative names:[*.ucd1.pp.uc.cn]

看起来好像 域名一定要 匹配 *.ucd1.pp.uc.cn 的才是正经证书

不过, 我填 https://www.baidu.com 是下载得到的。
应该是这个ssl证书的问题。

难道跟当前android设备的系统ssl证书有关系?

不懂啊, 而且 windows 也不行, 也要换成http的才能热更, 就只有ios可以。
好像是那ssl证书的问题, 可那个证书是正规的啊, 阿里云上买的, chrome浏览器访问是绿色的。

我也遇到了相同的问题,可以请教一下吗?

弱弱的问下。。。这个要怎么解决呢

这是服务器不支持 sni啊