【问题标题】:iOS - How to sign SOAP message with x509 certificateiOS - 如何使用 x509 证书签署 SOAP 消息
【发布时间】:2011-06-01 11:08:43
【问题描述】:

我正在使用带有 x509 证书的 SOAP 消息处理 iPhone 客户端。 而且我不知道如何使用 x509 证书 (client.cert) 签署消息。

有关于使用 openssl 的讨论,但我不知道如何使用 openssl,所以我正在查看 Apple 文档:http://developer.apple.com/library/mac/#documentation/Security/Conceptual/CertKeyTrustProgGuide/iPhone_Tasks/iPhone_Tasks.html 在上述文档中,有获取策略引用对象和评估信任的示例代码:

    NSString *thePath = [[NSBundle mainBundle]

                      pathForResource:@"Romeo Montegue" ofType:@"cer"];

NSData *certData = [[NSData alloc]

                     initWithContentsOfFile:thePath];

CFDataRef myCertData = (CFDataRef)certData;                 // 1



SecCertificateRef myCert;

myCert = SecCertificateCreateWithData(NULL, myCertData);    // 2



SecPolicyRef myPolicy = SecPolicyCreateBasicX509();         // 3



SecCertificateRef certArray[1] = { myCert };

CFArrayRef myCerts = CFArrayCreate(

                                   NULL, (void *)certArray,

                                   1, NULL);

SecTrustRef myTrust;

OSStatus status = SecTrustCreateWithCertificates(

                                                myCerts,

                                                myPolicy,

                                                &myTrust);  // 4



SecTrustResultType trustResult;

if (status == noErr) {

    status = SecTrustEvaluate(myTrust, &trustResult);       // 5

}
                                                    // 6

if (trustResult == kSecTrustResultRecoverableTrustFailure) {

    ...;

}


if (myPolicy)

    CFRelease(myPolicy);                                    

但是没有使用策略对象签署消息的示例。 你有什么线索吗?如果您对此有任何想法或经验,请帮助我。 非常感谢您的帮助。

提前致谢。

【问题讨论】:

    标签: iphone security soap certificate ws-security


    【解决方案1】:

    我在您发布的网站上浏览了安全框架 API,但我找不到任何可以为您提供 API 调用的东西,让您可以签署 SOAP 消息。此处记录的安全框架:

    http://developer.apple.com/library/mac/#documentation/Security/Reference/SecurityFrameworkReference/_index.html#//apple_ref/doc/uid/TP40004330

    将让您验证证书,并加载证书和密钥对。它会让你设置一些 SSL 的东西,以及各种授权。

    但它甚至几乎不做数字签名,并且与 SOAP 签名相去甚远——SOAP 签名是它们自己的特殊类型的签名,必须正确格式化才能被您发送到的服务所接受。

    有很多 API 可以让您签署 SOAP 消息: - 打开 SSL - 充气城堡 - 各种 Java EE 解决方案 - Axis2、JAX-WS - 几乎可以肯定 .NET 中的某些东西

    我原以为 iPhone 应用程序会有 一些东西,但我没有挖掘任何东西,并且发现至少有一个网站说什么都不存在,还有一些网站是认真的在一般情况下挖掘 iPhone 处理 SOAP 的能力。如果在这种环境中解析 XML 很棘手,那么创建 SOAP 签名将是您或多或少必须从头开始做的事情。

    如果您非常想在特定于 Apple 的环境中执行此操作,我建议:

    1. 确保您手头有证书和密钥对 - “client.cer”表明您只有 X509 证书,您需要类似 PKCS12(通常称为 *.p12、*.pfx、*.pem或 *.der 其中 * 是不带后缀的文件名)。您需要私钥来签名,因此仅凭证书是不够的。
    2. 获取一个可以让您获得低级别的库。签名主要分为三个部分:
      • 结合源数据创建哈希
      • 使用您的私钥对哈希进行加密
      • 将源数据、加密哈希(即签名)和验证签名所需的信息以适当的格式放在一起。

    对于 SOAP 签名,正确格式的标准由 W3C 维护的 XMLDSIG 标准定义。有很多方法可以对数据进行散列 - 所以最好的方法通常是查找您尝试使用的服务的需求。大多数 Web 服务都定义了一个策略,该策略将告诉您构建 SOAP 签名的可接受方式是什么。甚至还有定义此策略的标准(OASIS 的 WS-Policy),但这不是一个普遍实施的解决方案。

    有人建议 AppleCSP 模块将执行您需要的加密(甚至可能是底层哈希),但看起来您最终会获取原始输出并将其重新格式化为 SOAP 签名标准,因为我'我得到了一个强有力的迹象,表明这个领域可能很少有预构建的 API。

    【讨论】:

    • 非常感谢 bethlakshmi 提供如此详细的答案。我正在尝试 openSSL 和 Axis2(正弦服务器使用它)。希望我能在这方面走得更远。
    • 如果您正在尝试 Axis 2,请深入研究 Rampart,特别是 - 它有一些很好的示例说明如何将其用于 SOAP 签名以及一些不错的配置示例策略。它并不完美,但在 Rampart 主页上至少有一些起点。
    猜你喜欢
    • 2014-01-06
    • 2014-06-17
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 2016-01-14
    相关资源
    最近更新 更多