【问题标题】:S/Mime signing in PHP - Which file is which cert?S/Mime 在 PHP 中签名 - 哪个文件是哪个证书?
【发布时间】:2012-03-08 18:54:12
【问题描述】:

我正在尝试发送 S/Mime 签名和加密的电子邮件。

我有这个代码:

// Sign the message first
openssl_pkcs7_sign("inc/admin/email/body.txt","inc/admin/email/body/enc.txt",
 "signing_cert.pem",array("private_key.pem",
 "test"),array());

// Get the public key certificate.
$pubkey = file_get_contents("cert.pem");

//encrypt the message, now put in the headers.
openssl_pkcs7_encrypt("signed.txt", "enc.txt", $pubkey,$headers,0,1);

我的问题是哪个证书是哪个?如果我使用我拥有的证书(可以吗),我拥有的文件是:

  • .key
  • .csr
  • .crt
  • 和公共 .pem。

哪个是哪个?

【问题讨论】:

    标签: php email openssl smime


    【解决方案1】:

    一般来说,PEM 可以是私钥、公钥和证书。 它取决于您是如何创建/获得证书的。

    但在您的情况下,我希望如下: CSR = 证书签名请求,现在对你没用 CRT = 证书 KEY = 私钥 PEM = 公钥/证书

    【讨论】:

      【解决方案2】:

      首先,证书不是“SSL 证书”。这是一个误导性的术语,会导致您错误地使用。

      每个 X.509 证书都有预期用途(在密钥用法和扩展密钥用法字段中定义)。为保护 SSL 服务器而颁发的证书不能用于 S/MIME,反之亦然(除非您构建了一些不关心密钥使用的自定义基础架构)。

      现在,您使用 您的 证书和私钥进行签名,但是您使用收件人的证书(包括公钥)进行加密。如果您只有一个 CRT/KEY 文件对,则可能是您的证书和相应的私钥,您可以使用它们进行签名。但是,除非您自己加密消息(即您是加密消息的接收者),否则使用您的证书加密是没有意义的。

      【讨论】:

        猜你喜欢
        • 2015-01-08
        • 2023-03-06
        • 1970-01-01
        • 2011-02-10
        • 1970-01-01
        • 2014-09-16
        • 1970-01-01
        • 1970-01-01
        • 2014-10-12
        相关资源
        最近更新 更多