Подписание S / Mime в PHP - Какой файл какой сертификат? - PullRequest
1 голос
/ 17 февраля 2012

Я пытаюсь отправить подписанные и зашифрованные письма 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 ]

1 голос
/ 17 февраля 2012

Вообще говоря, PEM может быть закрытым ключом, открытым ключом, а также сертификатом. Он зависит от того, как вы создали / получили сертификат.

Но в вашем случае я ожидаю следующего: CSR = Запрос на подпись сертификата, бесполезный для вас сейчас CRT = Сертификат КЛЮЧ = закрытый ключ PEM = Открытый ключ / Сертификат

0 голосов
/ 17 февраля 2012

Прежде всего, сертификаты не являются "SSL-сертификатами". Это вводящий в заблуждение термин, который приводит вас к неправильному использованию.

Каждый сертификат X.509 предназначен для использования по назначению (как определено в полях «Использование ключа» и «Использование расширенного ключа»). Сертификаты, выданные для защиты серверов SSL, нельзя использовать для S / MIME и наоборот (если только вы не создадите какую-то пользовательскую инфраструктуру, которая не заботится о использовании ключей).

Теперь вы подписываетесь, используя свой сертификат и закрытый ключ, однако шифруете с помощью сертификата получателя (который включает в себя открытый ключ). Если у вас есть только одна пара файлов CRT / KEY, это, вероятно, ваш сертификат и ваш закрытый ключ соответственно, и вы можете использовать их для подписи. Но если вы не зашифруете сообщение для себя (то есть вы получите зашифрованное сообщение), шифрование с использованием вашего сертификата не имеет смысла.

...