1

我正在使用带有 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);                                    

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

提前致谢。

4

1 回答 1

2

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

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

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

但它甚至几乎没有在做数字签名方面点头,并且在 SOAP 签名附近没有任何地方 - 这是他们自己的特殊类型的签名,必须正确格式化才能被您发送到的服务所接受。

有很多 API 可以让您签署 SOAP 消息: - 开放式 SSL - Bouncy Castle - 各种 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。

于 2011-01-05T20:43:21.927 回答