Cryptography 如何使用X509证书(通过简单验证和其他问题签署文件)

Cryptography 如何使用X509证书(通过简单验证和其他问题签署文件),cryptography,openssl,x509,Cryptography,Openssl,X509,昨天我花了几个小时试图使用X509证书(thawte的“免费邮件”证书之一)对一个短文件进行数字签名。我终于让openssl将其作为SMIME消息进行签名,但我无法成功验证它,而且它是SMIME格式的--我没有访问“sendmail”程序的权限,该程序实际上可以发送SMIME文件 我只想创建一些通过简单剪切和粘贴“可摘录”的文件,如: ===BEGIN SIGNED DOCUMENT=== ===BEGIN DOCUMENT=== blah blah blah this is the plain

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

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

===BEGIN SIGNED DOCUMENT===
===BEGIN DOCUMENT===
blah blah blah this is the plaintext ...
===END DOCUMENT===
===BEGIN SIGNATURE===
AFab12121abadAF ...
===END SIGNATURE===
===END SIGNED DOCUMENT===
或者,我想我可以制作一个包含原始文件和签名的.zip文件

所以我想我的要求是:

  • 输入明文=任意文件
  • 输入signkey=来自X509证书
  • output=我可以通过剪切粘贴或附加一个.zip文件轻松地通过电子邮件发送给其他人
  • program=像openssl或gpg这样的免费开源软件
  • 节目!=一个我不明白发生了什么的神奇GUI
  • 能够轻松使用程序从输入生成输出
  • 能够轻松地从输出中提取纯文本(例如,直接通过眼睛或作为.zip文件的一个组件)
  • 能够验证明文是否由X509证书的受让人(即me)签署,以及证书的授予人(CA)是否是众所周知的CA。。。假设我是一个理性的人,负责保护证书不被其他方使用(否则有人会以我的身份签名)
  • X509证书有好的教程吗?它们是如何在实践中用于这些东西的?我有Schneier的第二版“应用密码术”&在密码算法+协议方面有相当多的经验,但对X509知之甚少,对于证书实际上是什么,我真的很困惑。(换句话说,“证书是发证方CA的加密断言,即证书中指定的X方是CA已知的身份?”和“证书使其持有人能够_____________;”)

    当我得到一个证书时,它会显示在证书管理器的Firefox的“您的证书”选项卡中,我可以导出它并用openssl读取它,但我想确保它不会以任何方式存储,其他人可以在不知道cert.passphrase的情况下使用它——我感到非常困惑,因为有些证书似乎只有公钥,而另一些证书有加密的私钥

    openssl周围是否有一个好的、简单的GUI包装器,允许您让它解释它在做什么



    编辑:thawte不容易让您直接使用证书请求;相反,它与web浏览器(我使用Firefox)通信&这些浏览器生成私钥并处理所有证书协议。因此,我可以将其导出为PKCS12文件,但不确定如何使用它。

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

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

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

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

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

    openssl pkcs12 -in file.p12 -out file.pem
    
    将其转换为pem格式

    编辑

    我很难弄清楚PEM和PKCS12以及所有这些东西之间的不同之处

    PKCS#12文件只是证书和密钥的容器。如果您想查看它包含的内容(至少加密部分除外),可以使用以下工具:。从浏览器导出的PKCS#12文件将包含加密格式的私钥、证书以及构成信任CA链所需的CA证书

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


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

    我知道了这一点,但我很难弄清楚PEM和PKCS12以及所有这些东西之间的不同之处。这就像把管道连接在一起,形成一个环状的圆圈和结。我可以找出如何建立个人联系,但总体情况令人困惑。