2010-03-24 12 views
16

Admitiré que no soy muy hábil en la verificación de claves. Lo que tengo es un script que descarga mensajes de un servidor POP3, y estoy intentando verificar las firmas DKIM en PHP. Ya he averiguado la comprobación de validación de hash de cuerpo (bh), pero no puedo entender la validación de encabezado.¿Cómo verifico una firma DKIM en PHP?

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

A continuación se muestra un ejemplo de mis encabezados de los mensajes. He podido usar el paquete Mail :: DKIM para validar la firma en Perl, así que sé que es bueno. Simplemente no puedo entender las instrucciones en el RFC y traducirlas al código 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] 

puedo extraer la clave pública de mi DNS muy bien, y creo que estoy canonizan las cabeceras correctamente, pero simplemente no puede conseguir la firma validada. No creo que estoy preparando mi clave o calculando la validación de la firma correctamente.

Es esto algo que es posible (¿necesito extensiones de pera o algo?) O está validando manualmente una firma DKIM en PHP no es factible?

+0

Pongo los encabezados en etiquetas de código, si no te gusta, puedes retroceder pero creo que es más fácil de leer. –

+0

Gracias. Pensé que había hecho eso, pero creo que arruiné algo. – angrychimp

+0

¿Ya entendiste esto? – Xeoncross

Respuesta

5

El Correo :: DKIM tiene las siguientes dependencias en otras bibliotecas:

  • Crypt :: OpenSSL :: RSA
  • Digest :: SHA
  • mail :: Dirección (parte del paquete MailTools)
  • MIME :: Base64
  • Net :: DNS

Todos estos shoul d estar disponible en PHP también. Entonces, compruebe manualmente que la validación en PHP es controlable. Mail :: DKIM está verificando la firma "manualmente" con esas libs. ¿Quizás tengas un pico en la fuente de Mail :: DKIM?

Adicionalmente "OpenDKIM Library (libopendkim)" está disponible. Puedes construir un módulo PHP alrededor de esta biblioteca como otras personas han integrado OpenSSL, cURL, etc. en PHP.

Tal vez le puede proporcionar el código de su verificar funciones con algunos datos de prueba, por lo que todo el mundo puede tener una mirada en ella?

HTH & Saludos

Michael

2

Intente interoperar con una herramienta externa u otro idioma.

Se puede considerar que adaptarse herramienta externa para hacer eso o usar la biblioteca C, que tiene un mejor soporte para trabajar con DKIM. También puede intentar integrar a través de Perl o Python.

+0

De hecho, he hecho esto por el momento, pasando el contenido de mi mensaje completo a un script Perl que verifica la firma usando el paquete Mail :: DKIM. Todavía estoy buscando una solución PHP nativa, así que actualizaré esta pregunta si/cuando puedo componer una clase o extensión. Gracias por la ayuda de todos. – angrychimp

+0

Es mejor tener su correo de pase MTA a través de algo así como opendkim, y luego en PHP simplemente verifica el contenido del encabezado que escribe opendkim, dependiendo de cómo se maneja este correo. ¿Tal vez deberías agregar detalles sobre lo que estás haciendo? – mc0e

2

puedo crear nuevo proyecto en googlecode. el nombre era phpMailDomainSigner Es compatible con DKIM-Signature y DomainKey-Signature en estilo orientado a objetos.

Cuestiones relacionadas