Worklight 开发是不是需要签名的 SSL 证书?

Posted

技术标签:

【中文标题】Worklight 开发是不是需要签名的 SSL 证书?【英文标题】:Is a signed SSL certificate required for Worklight development?Worklight 开发是否需要签名的 SSL 证书? 【发布时间】:2013-11-04 17:05:59 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

好的。我没有找到通用答案或接受特定证书的方法,但在 iOS 和 Android 上,可以禁用客户端证书验证以进行开发和测试。

在 Android 中,默认清单已经配置为忽略证书验证。默认情况下,AndroidManifest.xml 中的 Application 元素有一个属性:

android:debuggable="true"

使用此设置,客户端不会验证服务器提供的 SSL 证书。因此,在 Android 上,自签名证书默认就可以工作。要记住的重要一点是,当您从开发转移到生产时,将此属性设置为 false 很重要。当该属性设置为 false 时,客户端会验证服务器提供的证书,因此您需要为生产服务器提供真实签名的证书。 (有道理)

在 iOS 中,有几种建议的解决方案,我正在使用的一个是将以下内容添加到我的 .m 文件的末尾:

@implementation NSURLRequest(DataController)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host

    return YES;

@end

据我所知,这是一个未发布的 API,覆盖它是一种不好的形式,但它可以工作,而且这用于开发,所以我将继续使用它。

我想我可能很聪明,在盲目地返回 YES 之前检查我的 Worklight Server 的主机名,但无论如何,添加上面的代码确实允许我的应用程序在 worklight 上使用带有自签名证书的 SSL服务器。

这两个“解决方案”都需要在应用投入生产之前移除,因为它们会使应用容易受到中间人攻击。但是对于开发/早期测试/演示,它们允许 SSL,而无需获得真正的签名证书。

【讨论】:

希望我过去知道那个适用于 iOS 的 API……那太好了。【参考方案2】:

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

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

你可以这样做:

    首先要了解纯自签名证书不适用于 iOS 和 Android,因为平台本身不允许您将这些类型的证书安装到其信任库中。 请改用自签名 CA 证书。这些也很容易创建。它们与自签名证书相同,只是它们将 CA 位启用为 TRUE。

    请注意,某些工具生成的自签名证书通常不会创建也是 CA 的证书。确保您的自签名证书也是 CA。

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

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

    确保 certificate.crt 文件是 X.509 版本 3,并定义了以下扩展名:basicConstraints = CA:TRUE

    您可以通过运行以下命令检查 certificate.crt 文件:

    openssl x509 -in certificate.crt -text -noout

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

【讨论】:

【参考方案3】:

是的,您可以通过以下方式实现:

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

【讨论】:

我在很多地方都读过这个“通过 safari 添加证书,然后它将适用于您的混合应用程序”,但通过我的测试它不起作用。该证书被移动 Safari 浏览器接受,但仍被混合应用拒绝。 这很奇怪......我以前已经让这个工作了。我会仔细检查以确认我要工作的是什么。【参考方案4】:

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

【讨论】:

我没有找到明确接受特定自签名证书的方法,但我确实找到了在客户端禁用证书检查的方法。这仅适用于开发/测试,因为它会使应用容易受到中间人攻击。

以上是关于Worklight 开发是不是需要签名的 SSL 证书?的主要内容,如果未能解决你的问题,请参考以下文章

ssl

IBM Worklight 6.2:JMX 配置错误。无法获取 MBean 原因:“无法识别的 SSL 消息,明文连接

确定 SSL 证书是不是使用 Python 自签名

如何在 Chrome 信任的本地 Windows 虚拟主机开发机器上创建/安装自签名 SSL 证书? [复制]

如何给开发好的Windows内核驱动签名?双证书。ssl证书.

Worklight 推送通知 (APNS) 失败并出现 javax.net.ssl.SSLHandshakeException