【问题标题】:Error uploading file using Cordova filetransfer in SSL environment在 SSL 环境中使用 Cordova 文件传输上传文件时出错
【发布时间】:2015-01-24 23:51:03
【问题描述】:

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

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

我可以使用文件传输 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.

【问题讨论】:

  • 当服务器不在 HTTPS 中运行时,上传是否正常工作?另外,您的 Worklight 版本和内部版本号是多少?
  • 是的,它在 HTTP 上运行良好。它是 worklight stuio 插件 6.1.0.01

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


【解决方案1】:

该错误意味着您没有使用服务器的主机名作为证书的 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. 特别是,他们有一节解释如何处理您遇到的问题,标题为“主机名验证的常见问题”。

【讨论】:

  • 好的,我将尝试将我的 IP 添加到主题备用名称 (SAN)。但是我已经可以在调用文件上传时使用“trustAllHosts = true”来修复它,因为这只是开发环境中的一个问题,我认为我可以继续使用这个标志。感谢您的帮助
  • 是的,你也可以这样做,只要确保你在生产代码中去掉它。
猜你喜欢
  • 2016-05-14
  • 2018-03-03
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多