Ibm mobilefirst Worklight开发是否需要签名的SSL证书?

Ibm mobilefirst Worklight开发是否需要签名的SSL证书?,ibm-mobilefirst,worklight-security,Ibm Mobilefirst,Worklight Security,我正在Worklight 6.0版中进行一个演示,其中我需要使用从iOS和Android到Worklight服务器的SSL 有没有办法在Worklight server中使用自签名或测试证书?或者我是否需要从标准CA购买证书,即使是用于测试/演示 我已经看到了关于如何在Android系统信任库中导入我的证书的参考资料,这看起来很有希望,但我没有看到任何与iOS等效的内容。有许多本机代码解决方案(完全禁用SSL证书验证)以及关于哪些解决方案有效/无效的大量讨论(我找不到关于哪些解决方案在iOS 7

我正在Worklight 6.0版中进行一个演示,其中我需要使用从iOS和Android到Worklight服务器的SSL

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

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

将证书导入Android系统truststore是开发的最佳方法吗


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

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

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

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

    确定。我没有找到通用的答案,也没有找到接受特定证书的方法,但在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的主机名,但无论如何,添加上述代码确实允许我的应用程序在Worklight Server上使用带有自签名证书的SSL


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

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

    请注意,此支持并非来自Worklight。是否允许您为这些类型的证书建立信任,实际上取决于每个移动平台。上面David给出的建议实际上只是禁用SSL验证的变通方法,在某些情况下,SSL验证可能是一种有效的替代方法。然而,android:debugable标志仅在不涵盖某些场景(如启用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服务器安装,因为这只会将其导入浏览器空间,而不会导入设备。)
    • 通过查看设置->常规->配置文件->配置文件,检查是否安装了该软件
    • 确保iOS能够识别它并将其标记为“受信任”
  • 在Android上,您可以在Android CA商店中安装certificate.crt。certificate.crt可以放在/SD卡中,并且可以通过设置>安全性>从SD卡安装证书来安装。也可以通过将证书作为电子邮件附件发送或通过浏览器下载来打开证书,如上述步骤7所示。Android要求证书的别名