iOS - 如何使用x509证书签署SOAP消息

时间:2010-12-30 08:44:59

标签: iphone security soap certificate ws-security

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

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

提前致谢。

1 个答案:

答案 0 :(得分:2)

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

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

将允许您验证证书,并加载证书和密钥对。它将允许您设置一些SSL内容,以及各种授权。

但它甚至几乎没有点头做数字签名,也没有接近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. 获取一个可以让你获得低级别的库。签名有三个主要部分:
    • 合并源数据以创建哈希
    • 使用您的私钥进行加密以加密哈希
    • 以正确的格式将源数据,加密的哈希值(即签名)和签名验证所需的信息放在一起。
  3. 对于SOAP签名,正确格式的标准由W3C维护的XMLDSIG标准定义。有很多方法可以对数据进行哈希处理 - 因此最佳路径通常是查找您尝试使用的服务的需求。大多数Web服务定义了一个策略,该策略将告诉您构建SOAP签名的可接受方式是什么。甚至还有一个标准来定义这个策略(OASIS的WS-Policy),但这不是一个普遍实现的解决方案。

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