S / Mime在PHP中签名 - 哪个文件是哪个证书?

时间:2012-02-17 11:09:41

标签: php email openssl smime

我正在尝试发送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。

哪个是哪个?

2 个答案:

答案 0 :(得分:1)

一般来说,PEM可以是私钥,公钥和证书。 它标志着你是如何创建/获得证书的。

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

答案 1 :(得分:0)

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

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

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