Ada*_*iss 0 linux email encryption embedded
背景: 我继承了一个嵌入式的基于Linux的系统,它包含一个SMTP代理和一些我不得不忍受的古怪约束.它位于SMTP客户端和服务器之间.当SMTP客户端连接时,代理会打开与服务器的连接,并在进行一些即时处理后将客户端的数据传递给服务器.
挑战:我需要在使用标准PKI技术和S/MIME格式(例如,参见RFC2311)的途中签署和/或加密电子邮件.我可以从相应的证书中访问所有必需的公钥.
古怪的约束(请接受它们,因为它们远远超出我的控制范围):
问题:
谢谢你的想法.
问题1:
OpenSSL既是实用程序又是库,可以创建和验证S/MIME消息,包括MIME头.有关实用程序版本的使用,请参见smime(1)手册页 - 这些都是使用库版本构建的,因此它也可以使用它.
问题2:
这不仅是可以接受的,而且S/MIME签名总是这样做的.您可能会使用multipart/signed格式创建签名消息(请参阅RFC2311的 3.4.3 节).此多部分MIME类型包含分离的签名作为MIME类型为application/pkcs7-signature的对象.3.4.3.1节告诉我们这包含一个PKCS#7 signedData对象.RFC2315中描述了PKCS#7 ,第9节描述了signedData对象.本节告诉我们创建要签名的消息的消息摘要(S/MIME表示实现必须至少了解MD5和SHA1消息)摘要,因此您将使用SHA1作为具有最佳安全性的可互操作选项),并使用签名者的私钥对其进行加密.
只要签名设备很乐意从您那里获取SHA1哈希并使用签名者的私钥加密它,那么您可以自己完成所有剩余的签名生成.
然后你可以使用多部分/签名的MIME对象并根据S/MIME规范对其进行加密,然后再次签署整个蜡球(Sign-Encrypt-Sign模式),这样你最终可以:
附录:
OpenSSL支持可插入的加密"引擎",可以代表库执行加密操作.实现这一点的最佳方法可能是为外部签名设备创建一个OpenSSL引擎,并在启用该引擎的情况下调用常规S/MIME OpenSSL函数.如果你的外部签名设备是"现成的",那么可能已经有OpenSSL的引擎包装器.
| 归档时间: |
|
| 查看次数: |
581 次 |
| 最近记录: |