Подпишите составное письмо, используя PGP/MIME

Я пытаюсь подписать почту, используя PGP в php. Я мог заставить границы и заголовки работать правильно, но почтовая подпись недействительна (как заявляет Thunderbirds Enigmail).

Мой вопрос заключается в том, какую часть следует подписывать и на что следует обращать внимание при этом.

На данный момент источник сгенерированного письма выглядит так (текст и подпись заменены заполнителями, чтобы их было легко читать):

Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=_1b5364229a82b654fad7cf2aa969f02e"
MIME-Version: 1.0

This is a message in Mime Format.  If you see this, your mail reader does not support this format.

--=_1b5364229a82b654fad7cf2aa969f02e
Content-Type: multipart/alternative;
  boundary="=_53ba9ef8c471e6c8d72f215feaad8033"
Content-Transfer-Encoding: 7bit


--=_53ba9ef8c471e6c8d72f215feaad8033
&Content-Type: text/plain; charset=UTF-8
&Content-Transfer-Encoding: quoted-printable
&
&PLAIN TEXT CONTENT ENCODED IN QUOTED PRINTABLE
& 
&--=_53ba9ef8c471e6c8d72f215feaad8033
&Content-Type: text/html; charset=UTF-8
&Content-Transfer-Encoding: quoted-printable
& 
&HTML CONTENT ENCODED IN QUOTED PRINTABLE

--=_53ba9ef8c471e6c8d72f215feaad8033--

--=_1b5364229a82b654fad7cf2aa969f02e
Content-Type: application/pgp-signature; name="signature.asc"
Content-Disposition: attachment; filename="signature.asc"
Content-Description: OpenPGP digital signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)

PGP SIGNATURE HERE
-----END PGP SIGNATURE-----

--=_1b5364229a82b654fad7cf2aa969f02e--

В настоящее время строки, начинающиеся с &, используются для создания подписи. Разрывы строк — это просто новые строки (PHP_EOL).

Я пытался следовать RFC2015, но, похоже, это не относится к составному/альтернативному контенту.

Пожалуйста, помогите мне здесь, чтобы я мог закончить это.


person Hikaru-Shindo    schedule 25.10.2011    source источник


Ответы (1)


я сам узнал...

Прежде всего мне нужно было преобразовать все разрывы строк в CRLF, как в состоянии RFC. Затем мне нужно было подумать обо всем составном/альтернативном, включая его заголовки, как о сообщении для подписи. Так должно было быть:

Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=_1b5364229a82b654fad7cf2aa969f02e"
MIME-Version: 1.0

This is a message in Mime Format.  If you see this, your mail reader does not support this format.

--=_1b5364229a82b654fad7cf2aa969f02e
&Content-Type: multipart/alternative;
&  boundary="=_53ba9ef8c471e6c8d72f215feaad8033"
&Content-Transfer-Encoding: 7bit
&
&
&--=_53ba9ef8c471e6c8d72f215feaad8033
&Content-Type: text/plain; charset=UTF-8
&Content-Transfer-Encoding: quoted-printable
&
&PLAIN TEXT CONTENT ENCODED IN QUOTED PRINTABLE
& 
&--=_53ba9ef8c471e6c8d72f215feaad8033
&Content-Type: text/html; charset=UTF-8
&Content-Transfer-Encoding: quoted-printable
& 
&HTML CONTENT ENCODED IN QUOTED PRINTABLE
& 
&--=_53ba9ef8c471e6c8d72f215feaad8033--

--=_1b5364229a82b654fad7cf2aa969f02e
Content-Type: application/pgp-signature; name="signature.asc"
Content-Disposition: attachment; filename="signature.asc"
Content-Description: OpenPGP digital signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)

PGP SIGNATURE HERE
-----END PGP SIGNATURE-----

--=_1b5364229a82b654fad7cf2aa969f02e--

Где строки, начинающиеся с &, должны быть подписаны.

person Hikaru-Shindo    schedule 26.10.2011
comment
В качестве дополнения вы также должны удалить пробелы в конце каждой строки, которая будет подписана, поскольку некоторые почтовые транспорты могут делать это при передаче. - person jstedfast; 02.04.2014