2013-11-04 33 views
2

我正在从Worklight版本6.0开始演示,我需要使用iOS和Android中的SSL到Worklight Server。Worklight开发需要签名的SSL证书吗?

有什么方法可以在Worklight服务器中使用自签名或测试证书吗?还是我需要购买来自其中一个标准CA的证书,即使是测试/演示?

我见过有关如何在Android系统信任库中导入我的证书的参考,并且这看起来很有前景,但我没有看到任何与iOS相同的内容。有许多原生代码解决方案(完全禁用SSL证书验证)以及关于哪个解决方案工作/不工作的讨论(并且没有讨论iOS 7上仍然可用的工具)。

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

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

回答

4

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

在Android中,默认清单是已配置为,以忽略证书验证。默认情况下,在AndroidManifest.xml中的应用元素具有属性:

android:debuggable="true" 

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

在iOS中,有几个建议的解决方案,我正在使用的是将以下内容添加到我的<应用程序名称>的末尾。M档:

@implementation NSURLRequest(DataController) 
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host 
{ 
    return YES; 
} 
@end 

从我所收集,这是一个未公开的API,并重写它是坏的形式,但它的工作原理,这是发展,所以我用它去。

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

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

+0

希望我在过去知道iOS的这个API ......这很好。 – jnortey

0

是的,你可以通过执行以下操作做到这一点:

  1. 创建一个自签名的证书将作为证书颁发机构。
  2. 在iOS设备上安装此证书(我最简单的方法是将证书托管在服务器上并访问Safari中的链接,然后下载它)。 iOS设备现在将信任具有已由此证书颁发机构签名的证书的服务器
  3. 创建由您在步骤1中创建的证书颁发机构签署的新证书。
  4. 在您的Worklight服务器
+0

我读这“通过Safari添加证书,然后它会为你的混合应用工作“在很多地方,但通过我的测试,这是行不通的。该证书已被移动Safari浏览器接受,但仍被混合应用拒绝。 –

+0

多数民众赞成在奇怪的...我已经得到这个工作之前。我会再仔细检查一下,以证实我的工作。 – jnortey

0

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

+0

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

4

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

请注意,此支持不是来自Worklight。真正取决于每个移动平台允许您建立这些类型的证书的信任与否。上面David提供的建议实际上只是解决SSL验证的解决方法,在某些情况下这可能是一种有效的替代方法。然而,android:debuggable标志只会在你不能覆盖某些场景,比如直接更新被启用的情况下。另外,禁用所有形式的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退房手续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文件或将文件托管在网络浏览器上,您可以手动点击该文件进行安装。 (请勿直接从主机WL服务器安装它,因为这只会将其导入浏览器空间而不是设备。)
    • 检查,它被用在设置>通用> Profiles-寻找>安装配置描述文件
    • 确保iOS的识别并标记是“值得信赖的”
  8. 在Android上可以安装Android CA Store中的certificate.crt。 certificate.crt可以放在/ sdcard中,可以通过设置>安全>从SD卡安装证书进行安装。证书也可以通过发送电子邮件附件或通过浏览器下载来打开,如上面的步骤7所示。 Android要求提供证书的别名,请选择任何名称。
    • 检查,它被通过设置下寻找安装 - >安全 - >受信任的凭据 - >用户