17

私はキーの検証にあまり慣れていないことを認めます。私が持っているのは、POP3 サーバーからメッセージをダウンロードするスクリプトで、PHP で DKIM 署名を検証しようとしています。ボディ ハッシュ (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 から公開鍵を問題なく抽出できます。ヘッダーを正しく正規化していると思いますが、署名を検証できません。鍵の準備や署名検証の計算が正しく行われていないと思います。

これは可能ですか (pear 拡張機能が必要ですか?)、または PHP で DKIM 署名を手動で検証することは不可能ですか?

4

3 に答える 3

5

Mail::DKIM は他のライブラリに次のような依存関係があります:

  • クリプト::OpenSSL::RSA
  • ダイジェスト::SHA
  • Mail::Address (MailTools パッケージの一部)
  • MIME::Base64
  • ネット::DNS

これらはすべて PHP でも利用できるはずです。そのため、PHP の有効性が制御可能であることを手動で確認してください。Mail::DKIM は、これらのライブラリを使用して「手動で」署名を検証しています。もしかしたら、あなたは Mail::DKIM のソースにピークを持っていますか?

追加で「OpenDKIM ライブラリ (libopendkim)」が利用可能です。他の人が OpenSSL、cURL などを PHP に統合したように、このライブラリを中心に PHP モジュールを構築できます。

検証関数のコードにいくつかのテスト データを提供して、誰もがそれを確認できるようにすることはできますか?

HTH & よろしく

マイケル

于 2010-04-04T10:05:11.853 に答える
2

外部ツールまたは別の言語との相互運用を試してください。

それを行うために外部ツールを適応させるか、DKIM での作業をより適切にサポートする C ライブラリを使用することを検討できます。Perl または Python を介して統合を試みることもできます。

于 2010-04-01T20:41:52.553 に答える
2

Googlecode で新しいプロジェクトを作成します。名前はphpMailDomainSigner でし た。オブジェクト指向スタイルで DKIM-Signature と DomainKey-Signature をサポートします。

于 2011-01-29T06:33:11.110 に答える