Android Parse 实现无法验证自定义服务器主机名

标签 android parse-platform hostname

Android 上初始化 Parse 时,我能够在以下情况下成功连接到 Parse 服务器:
1) 我没有指定服务器 URL,或者
2) 我将服务器 URL 设置为解析服务器。

因为我们打算最终将我们的数据从 Parse 迁移到不同的主机,所以我们想连接到不同的服务器 URL。 但是,当我尝试指定重定向(用作代理)到 Parse 服务器的不同服务器 URL ( https://api.ourhostname.com/1/ ) 时,应用程序无法完全连接到服务器。从 iOS 项目实现时,此服务器 URL 工作正常。但是,当在 Android 等效设备上实现时:

Parse.initialize(new Parse.Configuration.Builder(this)
        .applicationId(APP_ID)
        .clientKey(CLIENT_KEY)
        .server("https://api.ourhostname.com/1/")
        .build()
    );

我收到一个 i/o 故障:

05-24 21:46:55.319 7140-7140/com.ourapp W/System.err: com.parse.ParseRequest$ParseRequestException: i/o failure
05-24 21:46:55.324 7140-7140/com.ourapp W/System.err:     at com.parse.ParseRequest.newTemporaryException(ParseRequest.java:290)
05-24 21:46:55.324 7140-7140/com.ourapp W/System.err:     at com.parse.ParseRequest$2.then(ParseRequest.java:145)
05-24 21:46:55.324 7140-7140/com.ourapp W/System.err:     at com.parse.ParseRequest$2.then(ParseRequest.java:139)
05-24 21:46:55.324 7140-7140/com.ourapp W/System.err:     at bolts.Task$15.run(Task.java:917)
05-24 21:46:55.324 7140-7140/com.ourapp W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
05-24 21:46:55.324 7140-7140/com.ourapp W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
05-24 21:46:55.324 7140-7140/com.ourapp W/System.err:     at java.lang.Thread.run(Thread.java:818)
05-24 21:46:55.324 7140-7140/com.ourapp W/System.err: Caused by: javax.net.ssl.SSLPeerUnverifiedException: Cannot verify hostname: api.ourhostname.com
05-24 21:46:55.329 7140-7140/com.ourapp W/System.err:     at android.net.SSLCertificateSocketFactory.verifyHostname(SSLCertificateSocketFactory.java:242)
05-24 21:46:55.329 7140-7140/com.ourapp W/System.err:     at android.net.SSLCertificateSocketFactory.createSocket(SSLCertificateSocketFactory.java:486)
05-24 21:46:55.329 7140-7140/com.ourapp W/System.err:     at com.android.okhttp.Connection.upgradeToTls(Connection.java:1226)
05-24 21:46:55.329 7140-7140/com.ourapp W/System.err:     at com.android.okhttp.Connection.connect(Connection.java:1183)
...

我可以从网络浏览器访问我们的自定义服务器 URL,该 URL 在浏览器中是可信且有效的,这意味着它不是自签名的。

有没有其他人在他们的 Android 项目中遇到过这个问题,以及关于如何成功让 Parse SDK 连接到自定义服务器 URL 的任何建议?

更新: 我们能够通过以下方式解决此问题:
1) 添加this solution在安卓端。
2) 调整我们的自定义服务器如何提供其公钥(这对于使 Marshmallow 能够连接到服务器尤为重要)。

最佳答案

我们能够通过以下方式解决此问题:
1) 添加this solution在安卓端。
2) 调整我们的自定义服务器如何提供其公钥(这对于使 Marshmallow 能够连接到服务器尤为重要)。

关于Android Parse 实现无法验证自定义服务器主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37429400/

相关文章:

java - 尝试打开相机导致我的应用程序崩溃

android - Android Studio 3.0 中不存在新的 Google Cloud 模块

ios - 使用零对象为PFRelation创建PFQuery

ios - 尝试使用指向另一个类的指针作为 Swift 中解析查询的一部分

dns - 虚线子域名或新域名?

java - 从 DataSource 类中获取主机名

Android View GONE 如果语言

java - 如何禁用添加时区

android - 检查 ParseFile 是否为空

python - 如何在 MacOS Sierra/High Sierra 中使用 python 获取用户设置的计算机名称