2

昨天我花了几个小时尝试使用 X509 证书(来自 thawte 的“免费邮件”证书之一)对一个短文件进行数字签名。我终于让 openssl 将其签名为 SMIME 消息,但我无法成功验证它,而且它采用 SMIME 格式——我无法访问实际上可以发送 SMIME 文件的“sendmail”程序。

我只想通过简单的剪切和粘贴创建一些“可摘录”的文件,例如:

===BEGIN SIGNED DOCUMENT===
===BEGIN DOCUMENT===
blah blah blah this is the plaintext ...
===END DOCUMENT===
===BEGIN SIGNATURE===
AFab12121abadAF ...
===END SIGNATURE===
===END SIGNED DOCUMENT===

或者,我想我可以制作一个包含原始文件和签名的 .zip 文件。

所以我想我的要求是:

  1. 输入明文 = 任意文件
  2. 输入signkey =来自X509证书
  3. 输出 = 我可以通过剪切和粘贴或附加单个 .zip 文件轻松地通过电子邮件发送给其他人的东西
  4. 程序 = 免费和开源的东西,例如 openssl 或 gpg
  5. 程序!=一个神奇的 GUI,我不明白发生了什么
  6. 能够轻松使用程序从输入中生成输出
  7. 能够轻松地从输出中提取明文(例如,直接通过眼睛或作为 .zip 文件的一个组件)
  8. 能够验证明文是否由 X509 证书的被授予者(即我)签署,并且证书的授予者 (CA) 是知名 CA……假设我是一个保持证书安全的理性人被其他方使用(否则有人可以像我一样签名)。

有没有关于 X509 证书的好教程以及它们在实践中如何用于这些东西?我有 Schneier 的“应用密码学”的第 2 版,并且在密码算法 + 协议方面有相当多的经验,但对 X509 知之甚少,我真的很困惑证书实际上是什么. (换句话说,“证书是颁发方 CA 的加密断言,即证书中指定的方 X 是 CA 已知的身份?”和“证书使其持有者能够_____”)

当我得到一个时,它会显示在 Firefox 的证书管理器的“您的证书”选项卡中,我可以将其导出并使用 openssl 读取它,但我想确保它不会以任何其他人可以使用的方式存储 w /o 知道证书。密码——我真的很困惑,因为似乎有些证书只有公钥,而其他证书有加密的私钥。

是否有一个围绕 openssl 的良好、简单的 GUI 包装器,可以让您解释它在做什么?


编辑: thawte 不容易让你直接使用证书请求;相反,它与 Web 浏览器(我使用 Firefox)对话,并生成私钥并处理所有证书协议。所以我可以将它导出为 PKCS12 文件,但我不确定如何使用它。

4

2 回答 2

2

所以我可以将它导出为 PKCS12 文件,但我不确定如何使用它。

如果使用 openssl 工具,可以使用命令

openssl pkcs12 -in file.p12 -out file.pem

将其转换为 pem 格式。

编辑

我无法弄清楚 PEM 和 PKCS12 以及所有这些东西的作用彼此不同

PKCS#12 文件只是证书和密钥的容器。如果你想查看它包含的内容(至少除了加密的部分),你可以使用诸如dumpasn1 之类的工具类的工具。您从浏览器导出的 PKCS#12 文件将包含加密格式的私钥、您的证书以及 CA 证书,这些证书是形成通往受信任 CA 的链所必需的。

同样,PEM 文件可以包含证书和密钥。在 PEM 文件中,证书和密钥采用 base64 编码并放置在一些文本分隔符中(PKCS#12 文件使用名为 ASN.1 的二进制编码来构造文件 - 您可以将 ASN.1 视为 XML 的二进制形式。您遇到的大多数加密结构都将使用 ASN.1) 进行编码。除此之外,格式之间唯一真正的区别是 PKCS#12 包含完整性检查 - 否则格式是等效的。

OpenSSL 最适合 PEM,而大多数浏览器和电子邮件应用程序都需要 PKCS#12,但您可以在格式之间自由转换。

于 2008-12-16T23:10:23.547 回答
1

首先,您可能需要了解私钥、公钥和证书之间的区别。证书是在声明“公钥 XX 属于个人 YY”上带有 CA 私钥的签名。如果您使用您的私钥签名,则可以使用您的公钥验证签名,信任 CA 的第三方可以断定签名是由您签名的。

如果您生成 S/MIME 消息并将其作为扩展名为 .p7s 的文件附加,大多数邮件程序可能能够验证它。

如果你想完全控制你正在做的事情,我的经验是围绕 PGP 格式的工具可以让你更好地控制(与实现 S/MIME 协议的邮件程序相比)。

于 2008-12-13T18:17:54.030 回答