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

PHP中的S/Mime签名-哪个文件是哪个证书?,php,email,openssl,smime,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_

我正在尝试发送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);
我的问题是哪个证书是哪个?如果我使用我拥有的证书(这样可以吗),我拥有的文件是:

  • .钥匙
  • .csr
  • .crt
  • 还有公众,pem

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

但在你的情况下,我希望: CSR=证书签名请求,现在对您没有用处 CRT=证书 密钥=私钥
PEM=公钥/证书一般来说,PEM可以是私钥、公钥,也可以是证书。 这取决于您是如何创建/获得证书的

但在你的情况下,我希望: CSR=证书签名请求,现在对您没有用处 CRT=证书 密钥=私钥
PEM=公钥/证书首先,证书不是“SSL证书”。这是一个误导性的术语,会导致错误的使用

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


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

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

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

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