2010-03-24 52 views
16

Tôi sẽ thừa nhận tôi không giỏi về xác minh khóa. Những gì tôi có là một kịch bản tải xuống thư từ máy chủ POP3 và tôi đang cố gắng xác minh chữ ký DKIM bằng PHP. Tôi đã tìm ra kiểm tra xác thực băm cơ thể (bh), nhưng tôi không thể tìm ra xác nhận tiêu đề.Làm cách nào để xác minh chữ ký DKIM trong PHP?

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

Dưới đây là một ví dụ về tiêu đề bài viết của tôi. Tôi đã có thể sử dụng gói Mail :: DKIM để xác nhận chữ ký trong Perl, vì vậy tôi biết nó rất tốt. Tôi chỉ có thể không có vẻ để tìm ra các hướng dẫn trong RFC và dịch chúng thành mã 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] 

Tôi có thể trích xuất khóa công khai khỏi DNS của mình và tôi tin rằng tôi đang chuẩn hóa đúng tiêu đề, nhưng tôi không thể xác thực chữ ký. Tôi không nghĩ rằng tôi đang chuẩn bị chìa khóa của mình hoặc tính toán xác thực chữ ký chính xác.

Đây có phải là điều có thể xảy ra (tôi có cần mở rộng lê hay gì đó không?) Hoặc xác nhận hợp lệ chữ ký DKIM trong PHP không khả thi?

+0

Tôi đặt các tiêu đề vào các thẻ mã, nếu bạn không thích nó cảm thấy tự do để quay trở lại nhưng tôi nghĩ rằng nó dễ đọc hơn. –

+0

Cảm ơn. Tôi nghĩ rằng tôi đã làm điều đó, nhưng tôi đoán tôi hơi say một cái gì đó lên. – angrychimp

+0

Bạn đã tìm ra điều này chưa? – Xeoncross

Trả lời

5

The Mail :: DKIM có sự phụ thuộc sau trên các thư viện khác:

  • Crypt :: OpenSSL :: RSA
  • Digest :: SHA
  • Thư :: Địa chỉ (một phần của gói MailTools)
  • MIME :: Base64
  • Net :: DNS

Tất cả những shoul d cũng có sẵn trong PHP. Vì vậy, kiểm tra thủ công tính hợp lệ trong PHP có thể điều khiển được. Mail :: DKIM xác minh chữ ký "thủ công" với các thư đó. Có lẽ bạn có một đỉnh cao vào nguồn của Mail :: DKIM?

Bổ sung "OpenDKIM Library (libopendkim)" khả dụng. Bạn có thể xây dựng một mô-đun PHP xung quanh thư viện này như những người khác đã tích hợp OpenSSL, cURL, v.v. thành PHP.

Có thể bạn có thể cung cấp mã xác minh chức năng của mình với một số dữ liệu thử nghiệm, để mọi người có thể xem nó?

HTH & Trân trọng

Michael

2

Thử kết hợp với công cụ bên ngoài hoặc ngôn ngữ khác.

Bạn có thể cân nhắc điều chỉnh công cụ bên ngoài để thực hiện việc đó hoặc sử dụng thư viện C có hỗ trợ tốt hơn để làm việc với DKIM. Bạn cũng có thể thử tích hợp thông qua Perl hoặc Python.

+0

Tôi đã thực sự thực hiện việc này trong thời gian này, chuyển nội dung thư đầy đủ của tôi tới một tập lệnh Perl để xác minh chữ ký bằng gói Mail :: DKIM. Tôi vẫn đang theo đuổi một giải pháp PHP gốc, vì vậy tôi sẽ cập nhật câu hỏi này nếu/khi tôi có thể soạn một lớp hoặc phần mở rộng. Cảm ơn sự giúp đỡ của mọi người. – angrychimp

+0

Tốt hơn để có thư MTA của bạn thông qua một cái gì đó như opendkim, và sau đó trong PHP bạn chỉ cần kiểm tra nội dung của tiêu đề mà opendkim viết - tùy thuộc vào chính xác cách bạn xử lý thư này. Có lẽ bạn nên thêm chi tiết về những gì bạn đang làm? – mc0e

2

tôi tạo dự án mới trong googlecode. tên là phpMailDomainSigner Nó hỗ trợ Chữ ký DKIM và Chữ ký khóa tên miền trong Kiểu hướng đối tượng.

Các vấn đề liên quan