Как проверить подпись DKIM в PHP? - PullRequest
17 голосов
/ 24 марта 2010

Я признаю, что не очень разбираюсь в проверке ключей.У меня есть скрипт, который загружает сообщения с 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 просто невозможно

Ответы [ 3 ]

5 голосов
/ 04 апреля 2010

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

  • Crypt :: OpenSSL :: RSA
  • Дайджест :: SHA
  • Mail :: Address (часть пакета MailTools)
  • MIME :: Base64
  • Net :: DNS

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

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

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

HTH & Best regards

Michael

2 голосов
/ 29 января 2011

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

2 голосов
/ 02 апреля 2010

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

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

...