我正在使用带有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);
但是没有样本可以使用策略对象来签名消息。 你有什么线索吗?如果您对此有任何想法或经验,请帮助我。 我非常感谢你的帮助。
提前致谢。
答案 0 :(得分:2)
我浏览了您发布的网站上的安全框架API,但我找不到任何可以让您通过API调用来签署SOAP消息的API。安全框架在此记录:
将允许您验证证书,并加载证书和密钥对。它将允许您设置一些SSL内容,以及各种授权。
但它甚至几乎没有点头做数字签名,也没有接近SOAP签名 - 这是他们自己特殊的签名类型,必须正确格式化才能被您发送的服务所接受。
有很多API可以让你签署SOAP消息: - 打开SSL - 充气城堡 - 各种Java EE解决方案 - Axis2,JAX-WS - 几乎可以肯定是.NET中的东西
我原本以为iPhone应用程序会有某些东西,但我没有挖掘任何东西,发现至少有一个网站说没有任何东西存在,还有一些网站认真对待深入研究了iPhone处理SOAP的能力。如果在这种环境中进行XML解析很棘手,那么创建一个SOAP签名将是你必须要做的更多或更少的事情。
如果您迫切希望在特定于Apple的环境中执行此操作,我建议:
对于SOAP签名,正确格式的标准由W3C维护的XMLDSIG标准定义。有很多方法可以对数据进行哈希处理 - 因此最佳路径通常是查找您尝试使用的服务的需求。大多数Web服务定义了一个策略,该策略将告诉您构建SOAP签名的可接受方式是什么。甚至还有一个标准来定义这个策略(OASIS的WS-Policy),但这不是一个普遍实现的解决方案。
有人建议AppleCSP模块将执行您需要的加密(甚至可能是底层散列),但看起来您最终将获取原始输出并将其重新格式化为SOAP签名标准,因为我'我得到了一个强有力的迹象,表明这个领域可能只有非常少的预建API。