2

我正在Worklight 6.0 版中进行演示,我需要在其中使用从iOS 和Android 到Worklight Server 的SSL。

有没有办法在 Worklight 服务器中使用自签名或测试证书?或者我是否需要从标准 CA 之一购买证书,即使是用于测试/演示?

我已经看到了有关如何在 Android 系统信任库中导入我的证书的参考资料,这看起来很有希望,但我没有看到任何与 iOS 等效的东西。有许多本机代码解决方法(完全禁用 SSL 证书验证)以及关于哪种解决方案有效/无效的大量讨论(并且没有讨论我能找到的在 iOS 7 上仍然有效的方法)。

将证书导入 Android 系统信任库是开发的最佳方法吗?

是否有适用于 iOS 的简单解决方案,允许不完全禁用证书检查的自签名或测试证书?

4

4 回答 4

4

好的。我没有找到通用答案或接受特定证书的方法,但在 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 而无需获得真正的签名证书。

于 2013-11-05T18:04:07.210 回答
4

有一种非常简单的方法可以将未经已知 CA 签名的证书用于开发和测试目的。

请注意,此支持并非来自 Worklight。是否允许您为这些类型的证书建立信任实际上取决于每个移动平台。上面 David 给出的建议实际上只是禁用 SSL 验证的解决方法,在某些情况下这可能是一个有效的替代方案。但是, android:debuggable 标志只会让您了解它,因为它不涵盖某些场景,例如启用 directUpdate 时。加上禁用所有形式的 SSL 验证,即使在开发/测试环境中也可能不是您真正想要的。

这是您可以执行的操作:

  1. 首先要了解纯自签名证书不适用于 iOS 和 Android,因为平台本身不允许您将这些类型的证书安装到他们的信任库中。
  2. 请改用自签名 CA 证书。这些也很容易创建。它们与自签名证书相同,只是它们的 CA 位启用为 TRUE。
  3. 请注意,某些工具生成的自签名证书通常不会创建也是 CA 的证书。确保您的自签名证书也是 CA。

    • 关于如何创建自签名 CA 证书的 OpenSSL 示例:

    openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

  4. 确保 certificate.crt 文件是 X.509 版本 3,并定义了以下扩展名:basicConstraints = CA:TRUE
  5. 您可以通过运行以下命令来检查 certificate.crt 文件:

    openssl x509 -in certificate.crt -text -noout

  6. 将此证书用作您的服务器证书。
  7. 在 iOS 上,通过电子邮件发送您的 certificate.crt 文件或将文件托管在 Web 浏览器上,您可以手动单击它来安装它。(不要直接从托管 WL 服务器安装它,因为这只会将其导入浏览器空间而不是设备。)
    • 通过查看 Settings->General->Profiles->Configuration Profiles 检查它是否已安装
    • 确保 iOS 识别并标记为“受信任”
  8. 在 Android 上,您可以在 Android CA 商店中安装 certificate.crt。certificate.crt 可以放在 /sdcard 中,并且可以从设置 > 安全 > 从 SD 卡安装证书进行安装。也可以通过将证书作为电子邮件附件发送或通过浏览器下载来打开证书,如上面的步骤 7 所示。Android 要求证书的别名,选择任何名称。
    • 通过查看设置 -> 安全 -> 受信任的凭据 -> 用户来检查它是否已安装
于 2013-11-07T16:36:13.377 回答
0

是的,您可以通过执行以下操作来实现:

  1. 创建将充当证书颁发机构的自签名证书。
  2. 在 iOS 设备上安装此证书(对我来说,最简单的方法是将证书托管在服务器上并访问 safari 中的链接,然后下载它)。iOS 设备现在将信任具有已由该证书颁发机构签署的证书的任何服务器
  3. 创建由您在步骤 1 中创建的证书颁发机构签名的新证书。
  4. 在您的 Worklight 服务器上使用这个新签名的证书
于 2013-11-04T21:49:52.460 回答
0

目前 Worklight 应用程序不适用于自签名证书。它旨在用于生产,因此它只接受有效的 CA 证书。

于 2013-11-05T13:56:12.463 回答