在SSL环境中使用Cordova文件传输上传文件时出错

时间:2014-11-26 15:21:17

标签: android cordova ssl ibm-mobilefirst hybrid-mobile-app

在Worklight Development Server以HTTPS运行时尝试使用Cordova文件传输API上传文件时遇到问题。

我使用有效的CA创建了证书并将其放入服务器,并将其导入Android模拟器。

我可以使用File Transfer API登录应用程序并下载数据,但是当我尝试使用它来上传数据时,我在LogCat中收到以下消息。

代码调用我们的WL应用程序实现的servlet来执行下载和上传。

11-26 09:20:27.854: E/FileTransfer(2362): {"target":"https:\/\/my-ip-address\/APP\/appServlet","source":"file:\/\/\/storage\/sdcard\/anywhere\/wilson\/app2\/it_1305\/1416946570255.jpg","http_status":0,"code":3}
11-26 09:20:27.854: E/FileTransfer(2362): java.io.IOException: Hostname 'my-ip-address' was not verified
11-26 09:20:27.854: E/FileTransfer(2362):   at com.squareup.okhttp.Connection.upgradeToTls(Connection.java:146)
11-26 09:20:27.854: E/FileTransfer(2362):   at com.squareup.okhttp.Connection.connect(Connection.java:106)
11-26 09:20:27.854: E/FileTransfer(2362):   at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:287)
11-26 09:20:27.854: E/FileTransfer(2362):   at com.squareup.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:248)
11-26 09:20:27.854: E/FileTransfer(2362):   at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:197)
11-26 09:20:27.854: E/FileTransfer(2362):   at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:383)
11-26 09:20:27.854: E/FileTransfer(2362):   at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
11-26 09:20:27.854: E/FileTransfer(2362):   at com.squareup.okhttp.internal.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:179)
11-26 09:20:27.854: E/FileTransfer(2362):   at org.apache.cordova.filetransfer.FileTransfer$1.run(FileTransfer.java:388)
11-26 09:20:27.854: E/FileTransfer(2362):   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
11-26 09:20:27.854: E/FileTransfer(2362):   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
11-26 09:20:27.854: E/FileTransfer(2362):   at java.lang.Thread.run(Thread.java:841)
11-26 09:20:27.854: E/FileTransfer(2362): Failed after uploading 0 of 18725 bytes.

1 个答案:

答案 0 :(得分:2)

该错误意味着您没有使用服务器的主机名作为证书的CN。 Android验证CN(公用名)是否与主机名匹配,否则证书无效,因为它可能是使用您的证书假装他们是(more information about this here)的任何其他服务器。

如果您的服务器没有主机名(如在hostname.com中),只有IP地址,则必须在主题备用名称(SAN)中指定IP作为证书扩展的一部分。请参阅this answer on how to add it as an extension.具体过程取决于您用于生成证书的工具。

有关详细信息,look here at the android documentation on how to deal with HTTPS and SSL.特别是,他们有一节介绍如何处理您遇到的问题,标题为“主机名验证的常见问题”。