最近我被分配了一个iOS项目,我需要使用应用程序从服务器下载的密钥对pdf文档进行数字签名。 我还不清楚签署文档所涉及的过程,直到现在我知道我将使用提供给我的私钥文件签署我的pdf,然后使用公钥进行验证同一档案的版本。
我已经看到数字符号可以使用iText for Java或iTextSharp for C#等库来实现。这就是为什么我想知道iOS是否有类似的东西?如果没有,那么使用Quartz能力来管理pdf文档的过程是什么?
嗯......我一直在检查Apple文档,我发现了这个:
https://developer.apple.com/documentation/security/certificate_key_and_trust_services
我认为这应该支持X.509格式...我可以用它来签署pdf作为一个实例os CFData我猜。此外,我一直在检查CryptoExercise示例代码,但我不是100%确定这是否是我正在寻找的。
其他建议告诉我检查Adobe文档,但尚未找到使用证书签署文档的C api。
如果有人使用了Apple提供的证书服务......任何建议或更多示例代码都可以帮助您理解该流程。
答案 0 :(得分:10)
巴勃罗,
签署PDF文档是一项艰巨的任务(我的公司正在Pascal的Windows世界中这样做)。
一般情况下,我可以告诉您,您可能找不到可以合并到项目中的可用源代码。要了解它是如何完成的,iText源是一个很好的起点,因为一切都在那里。
在objective-c中,你走的是正确的道路。使用带有SecKeyRawSign等函数的X.509证书是正确的方法(因为实际的给定填充是旧的,你需要创建自己的填充以支持例如SHA256。你可以在这里看到,如何做到这一点:{ {3}})。 'dataToSign'只是您要签名的PDF内容的散列(例如SHA256)。
要找出您必须准确签署PDF源的哪一部分,您必须检查adobe PDF 1.6文档,或者在组中进行一些搜索。使用哪种语言对PDF进行签名没有区别。
最后,您将在PDF文档的预定义部分中嵌入签名和一些有关签名的信息(通过这样做,注意不要破坏有效哈希;))并且可以使用任何内容查看和验证其他PDF签名/验证软件。
对不起,我无法向您提供相关代码,但您会在X.509证书周围找到足够的样本 - 例如创建SSL / SSH连接。如果您搜索SecKeyRawSign,您甚至可以找到一些签名样本(至少与其他模式一样)。如果您找到用于签署内容部分并将签名嵌入最终PDF的PDF语法,那就是您所需要的。
我希望这对你有所帮助
麦