2010-03-24 8 views
16

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

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; [email protected]; t=1268436255; 
    h=From:Subject:X-Outgoing:Date; 
    bh=gqhC2GEWbg1t7T3IfGMUKzt1NCc=; 
    b=ZmeavryIfp5jNDIwbpifsy1UcavMnMwRL6Fy6axocQFDOBd2KjnjXpCkHxs6yBZn 
    Wu+UCFeAP+1xwN80JW+4yOdAiK5+6IS8fiVa7TxdkFDKa0AhmJ1DTHXIlPjGE4n5; 
To: [email protected] 
Message-ID: <EF.CC.24859.F1DCA9B4> 
From: DKIM Tester <[email protected]> 
Reply-To: [email protected] 
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: [email protected] 
X-OriginalArrivalTime: 12 Mar 2010 23:25:50.0326 (UTC) FILETIME=[5A0ED160:01CAC23B] 

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

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

+0

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

+0

Спасибо. Я думал, что сделал это, но, наверное, я что-то напортачил. – angrychimp

+0

Вы уже поняли это? – Xeoncross

ответ

5

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

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

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

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

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

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

Майкл

2

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

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

+0

Я на самом деле это сделал, передавая полный контент сообщения на Perl-скрипт, который проверяет подпись, используя пакет Mail :: DKIM. Я все еще преследую собственное PHP-решение, поэтому я обновлю этот вопрос, если/когда я смогу составить класс или расширение. Спасибо за помощь каждого. – angrychimp

+0

Лучше, чтобы ваша MTA проходила почту через что-то вроде opendkim, а затем в PHP вы просто проверяли содержимое заголовка, который пишет opendkim, в зависимости от того, как именно вы обрабатываете это письмо. Может быть, вам следует добавить подробную информацию о том, что вы делаете? – mc0e

2

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