好的。我没有找到通用答案或接受特定证书的方法,但在 iOS 和 Android 上,可以禁用客户端证书验证以进行开发和测试。
在 Android 中,默认 Manifest已配置为忽略证书验证。默认情况下,AndroidManifest.xml 中的 Application 元素有一个属性:
android:debuggable="true"
使用此设置,客户端不会验证服务器提供的 SSL 证书。所以在 Android 上,自签名证书默认就可以工作。要记住的重要一点是,当您从开发转移到生产时,将此属性设置为 false 很重要。当该属性设置为 false 时,客户端会验证服务器提供的证书,因此您需要为生产服务器提供真实签名的证书。(说得通)
在 iOS 中,有几种建议的解决方案,我正在使用的一个是将以下内容添加到我的 < App Name >.m 文件的末尾:
@implementation NSURLRequest(DataController)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end
据我所知,这是一个未发布的 API,重写它是一种不好的形式,但它可以工作,而且这仅用于开发,所以我会使用它。
我想我可能很聪明,在盲目地返回 YES 之前检查我的 Worklight Server 的主机名,但无论如何,添加上面的代码确实允许我的应用程序在 Worklight 服务器上使用带有自签名证书的 SSL。
这两个“解决方案”都需要在应用程序投入生产之前删除,因为它们会使应用程序容易受到中间人攻击。但是对于开发/早期测试/演示,它们允许 SSL 而无需获得真正的签名证书。