Отправка подписанных писем с использованием PHP - PullRequest
0 голосов
/ 25 ноября 2011

Чего я хотел бы добиться, так это возможности отправлять подписанные электронные письма, чтобы почтовые клиенты пользователей отображали такие письма как доверенные (например, в Thunderbird такие письма иногда помечаются значком закрытого конверта).

Я нашел библиотеку PHPMailer, которая должна отправлять подписанные электронные письма, но я думаю, что она просто оборачивает функцию PHP openssl_pkcs7_sign. Я не уверен, что и как получить и использовать ключи и сертификаты, которые являются аргументами функции. Есть параметры: $ signcert и $ privkey. Из того, что я понимаю, $ signcert должен быть общедоступным сертификатом, используемым для проверки того, что сообщение было правильно подписано. $ Privkey связан с сертификатом, должен храниться в секрете и использоваться для подписи электронных писем. Я правильно до сих пор?

Моя проблема в том, как получить надлежащие сертификаты. Я думаю, что OpenSSL позволяет мне создавать свои собственные сертификаты, но достаточно ли таких сертификатов для моих нужд? Если они есть, как их правильно генерировать? Я имею в виду, что могут быть сертификаты разной длины и другие варианты, которые могут быть важны, и я не знаю об этом. И, кстати, я заметил, что самозаверяющие сертификаты «https» вызывают предупреждения в браузерах. То же самое происходит с почтой? В таком случае, вероятно, мне стоит купить сертификат в проверенном центре сертификации. Можете ли вы дать мне совет, какие центры мне следует рассмотреть?

Ответы [ 2 ]

2 голосов
/ 25 ноября 2011

Я думаю, что OpenSSL позволяет мне создавать свои собственные сертификаты, но достаточно ли таких сертификатов для моих нужд?

Мы не знаем, каковы ваши потребности.

Сертификат сам по себе бесполезен для подписи сообщений. Значение приходит, когда сам сертификат (проверяемый) аутентифицирован третьей стороной, приемлемой как для отправителя, так и для получателя. Эта третья сторона является центром сертификации (например, Thawte, Verisign и т. Д.), Хотя в рамках организации может быть достаточно предоставить свой собственный центр сертификации. Документы OpenSSL подробно объясняют, как создать свой собственный сертификат CA, который вы можете использовать для подписи других сертификатов.

У вас впереди долгий путь обучения, прежде чем вы сможете реализовать какой-либо код - вы могли бы сделать хуже, чем начать с инструкций openssl и x509, как это делается.

1 голос
/ 27 ноября 2011

Здесь [1] подразумевается, что сертификат, используемый для подписи электронных писем, должен быть выдан Центром сертификации (таким образом, почтовый клиент не будет давать никаких предупреждений). Список некоторых органов, которые выдают бесплатные сертификаты, можно найти здесь: [2]. Тот, который я выбрал, дает сертификат, устанавливая его непосредственно в веб-браузер. Так что, чтобы сделать что-то еще, это должно быть экспортировано. Популярный формат - * .p12, в котором можно хранить как открытый, так и закрытый ключ. Но похоже, что использование функции PHP openssl_pkcs7_sign() и указание ее аргументов в файле с обоими сертификатами не работает - OpenSSL возвращает неоднозначную ошибку error:0906D06C:PEM routines:PEM_read_bio:no start line. После разделения ключей (с использованием OpenSSL) подпись работает нормально.

Кстати, хотя PHPMailer и должен петь электронные письма, его текущая версия не работает. Почта подписывается, сохраняется во временном файле, файл удаляется, после чего содержимое файла отправляется (поэтому сообщение пустое).

[1] - http://kb.mozillazine.org/Message_security

[2] - http://kb.mozillazine.org/Getting_an_SMIME_certificate

...