Как проверить подпись DKIM в PHP?

Признаюсь, я не очень разбираюсь в проверке ключа. У меня есть скрипт, который загружает сообщения с сервера POP3, и я пытаюсь проверить подписи DKIM в PHP. Я уже выяснил проверку проверки хэша тела (bh), но я не могу понять проверку заголовка.

http://www.dkim.org/specs/rfc4871-dkimbase.html#rfc.section.6.1.3

Ниже приведен пример моих заголовков сообщений. Я смог использовать пакет Mail :: DKIM для проверки подписи на Perl, поэтому я знаю, что это хорошо. Я просто не могу понять инструкции в RFC и перевести их в PHP-код.

DomainKey-Signature: q=dns; a=rsa-sha1; c=nofws; s=angrychimp-1.bh; d=angrychimp.net; h=From:X-Outgoing; b=RVkenibHQ7GwO5Y3tun2CNn5wSnooBSXPHA1Kmxsw6miJDnVp4XKmA9cUELwftf9 nGiRCd3rLc6eswAcVyNhQ6mRSsF55OkGJgDNHiwte/pP5Z47Lo/fd6m7rfCnYxq3 DKIM-Signature: v=1; a=rsa-sha1; d=angrychimp.net; s=angrychimp-1.bh; c=relaxed/simple; q=dns/txt; i=@angrychimp.net; t=1268436255; h=From:Subject:X-Outgoing:Date; bh=gqhC2GEWbg1t7T3IfGMUKzt1NCc=; b=ZmeavryIfp5jNDIwbpifsy1UcavMnMwRL6Fy6axocQFDOBd2KjnjXpCkHxs6yBZn Wu+UCFeAP+1xwN80JW+4yOdAiK5+6IS8fiVa7TxdkFDKa0AhmJ1DTHXIlPjGE4n5; To: iptest@example.com Message-ID: <EF.CC.24859.F1DCA9B4> From: DKIM Tester <noreply@angrychimp.net> Reply-To: noreply@angrychimp.net Subject: Automated DKIM Testing (angrychimp.net) X-Outgoing: dhaka Date: Fri, 12 Mar 2010 15:24:15 -0800 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline MIME-Version: 1.0 Return-Path: noreply@angrychimp.net X-OriginalArrivalTime: 12 Mar 2010 23:25:50.0326 (UTC) FILETIME=[5A0ED160:01CAC23B] 

Я могу извлечь публичный ключ из моего DNS как можно точнее, и я считаю, что я правильно канонизирую заголовки, но я просто не могу проверить подпись. Я не думаю, что я готовлю свой ключ или правильно вычислил правильность подписи.

Является ли это чем-то возможным (мне нужны расширения груши или что-то в этом роде) или вручную проверяет подпись DKIM на PHP просто невозможно?

Mail :: DKIM имеет следующие зависимости от других библиотек:

  • Crypt :: OpenSSL :: RSA
  • Digest :: ША
  • Mail :: Address (часть пакета MailTools)
  • MIME :: Base64
  • Net :: DNS

Все это должно быть доступно и на PHP. Таким образом, ручная проверка правильности в PHP управляема. Mail :: DKIM проверяет подпись «вручную» с этими lib. Может быть, у вас есть пик в источнике Mail :: DKIM?

Дополнительно доступна «Библиотека OpenDKIM (libopendkim) ». Вы можете создать PHP-модуль вокруг этой библиотеки, так как другие люди интегрировали OpenSSL, cURL и т. Д. В PHP.

Может быть, вы можете предоставить код вашей функции проверки с некоторыми тестовыми данными, чтобы каждый мог взглянуть на него?

HTH & С наилучшими пожеланиями

Майкл

Попробуйте взаимодействовать с внешним инструментом или другим языком.

Вы можете рассмотреть возможность адаптации внешнего инструмента для этого или использования библиотеки C, которая имеет лучшую поддержку для работы с DKIM. Вы также можете попытаться интегрироваться через Perl или Python.

Я создаю новый проект в googlecode. имя было phpMailDomainSigner. Он поддерживает подпись DKIM и подпись DomainKey в объектно-ориентированном стиле.