2010-03-24 26 views
16

Przyznaję, że nie jestem bardzo biegły w weryfikacji klucza. Mam skrypt, który pobiera wiadomości z serwera POP3 i próbuję zweryfikować sygnatury DKIM w PHP. Znalazłem już sprawdzanie poprawności body hash (bh), ale nie mogę ustalić poprawności nagłówka.Jak sprawdzić podpis DKIM w PHP?

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

Poniżej jest przykład moich nagłówków wiadomości. Byłem w stanie użyć pakietu Mail :: DKIM do sprawdzenia poprawności podpisu w Perlu, więc wiem, że to dobrze. Po prostu nie mogę wymyślić instrukcji w RFC i przetłumaczyć ich na kod 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] 

mogę wydobyć z mojego klucza publicznego DNS dobrze, i wierzę, że jestem canonicalizing nagłówki poprawnie, ale po prostu nie może uzyskać podpis zatwierdzone. Nie sądzę, żebym przygotowywał mój klucz lub poprawnie obliczał poprawność podpisu.

Czy jest to coś, co jest możliwe (czy potrzebuję rozszerzeń gruszki czy coś takiego?) Lub czy ręczne sprawdzanie poprawności podpisu DKIM w PHP jest niewykonalne?

+0

Umieszczam nagłówki w tagach kodu, jeśli nie podoba ci się, cofnij, ale myślę, że łatwiej jest je przeczytać. –

+0

Dzięki. Myślałem, że to zrobiłem, ale chyba coś spieprzyłem. – angrychimp

+0

Czy zdałeś sobie z tego sprawę? – Xeoncross

Odpowiedz

5

Mail :: DKIM ma następujące współzależności z innymi bibliotekami:

  • Crypt :: OpenSSL :: RSA
  • Digest :: SHA
  • Poczta :: Adres (część pakietu MailTools)
  • MIME :: Base64
  • Net :: DNS

Wszystkie te shoul d będzie dostępny również w PHP. Więc ręcznie sprawdź poprawność w PHP można kontrolować. Mail :: DKIM weryfikuje podpis "ręcznie" za pomocą tych bibliotek. Może masz szczyt do źródła Mail :: DKIM?

Dodatek "OpenDKIM Library (libopendkim)" jest dostępny. Możesz zbudować moduł PHP wokół tej biblioteki, tak jak inni ludzie mają zintegrowane OpenSSL, cURL, itp. W PHP.

Może możesz podać kod swojej funkcji weryfikacji za pomocą niektórych danych testowych, aby każdy mógł na nią spojrzeć?

HTH & poważaniem

Michael

2

Spróbuj współdziałać z zewnętrznym narzędziem lub innym językiem.

Można zaadaptować narzędzie zewnętrzne, aby to zrobić lub użyć biblioteki C, która ma lepsze wsparcie dla pracy z DKIM. Możesz także spróbować zintegrować się za pomocą Perla lub Pythona.

+0

Wykonałem to na razie, przekazując pełną treść wiadomości do skryptu Perla, który weryfikuje podpis za pomocą pakietu Mail :: DKIM. Wciąż pracuję nad natywnym rozwiązaniem PHP, więc zaktualizuję to pytanie, jeśli/kiedy będę w stanie skomponować klasę lub rozszerzenie. Dzięki za pomoc wszystkich. – angrychimp

+0

Lepiej, aby twój MTA przekazywał pocztę przez coś takiego jak opendkim, a potem w PHP sprawdzasz zawartość nagłówka, który pisze opendkim - zależnie od tego, jak dokładnie obchodzisz się z tą pocztą. Może powinieneś dodać szczegóły dotyczące tego, co robisz? – mc0e