Как рассчитать параметр 'b' в DKIM SIGNATURE - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь подписать сообщение, отправленное с помощью SMTP-команд (используя telnet) с помощью протоколя DKIM, я применил все шаги на официальном сайте dkim, остается только то, как я могу вычислить параметр 'b', если я его проверю с закрытым ключом? Или используя другой метод? Спасибо

Ответы [ 5 ]

0 голосов
/ 18 июня 2019

К сожалению, он не совпадает с сигнатурой, сгенерированной PowerMta.

'b' сгенерировано моей подписью:

lNLa3tKsq6IEotwq6Go5vPUjj6zbzpIEqC7Mr90SZFrXPVBNZbHyO4igroLE5Ax77lAAAwEX9+cN
TCeIbzYE08K7kB7I4/k8McDe3T5V+T2jcZuR3ukWK12BkQBAmFZNogynId0tt1WPXK3zHDGdKpHC
oxu5gKfrEVNsHo7gyRc=

Заголовок после теста с PowerMta:

    DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=selector1; d=domain.com; h=Subject:From:To; i=btt@domain.com; bh=rcr9nmkeqsjAGn29CUiUNJFRSmc=; b=j/jYKloUFEbmzj5JdwmR7MCBB+UtuJq5V0wImYElaY/xob8CnRY39Z0TfPonp4y2qtIE/wpqwnT0
   YrHcNM8BY3uQ3ovm3pq7lTmwvM6XqA4rgnlhcyZnQO9uoUSGebsbR8KBhwZSpolF7UEcr8TSQdfO
   OG+fDZIHeq6G7DAg5cQ=
Subject: ddddd
From: btt@domain.com
To: email@gmail.com
0 голосов
/ 18 июня 2019

Это новый контент для подписи:

subject:ddddd
from:btt@domain.com
to:email@gmail.com
dkim-signature:v=1; a=rsa-sha1; c=relaxed/relaxed; s=selector1; d=domain.com; h=subject:from:to; i=btt@domain.com; bh=rcr9nmkeqsjAGn29CUiUNJFRSmc=; b=
0 голосов
/ 18 июня 2019

Оригинальный заголовок:

Subject: ddddd
From: btt@domain.com
To: email@gmail.com

Канонизированный заголовок с DKIM-ПОДПИСЬЮ:

subject:ddddd
from:btt@domain.com
to:email@gmail.com
DKIM-Signature: v=1;
a=rsa-sha1;
c=relaxed/relaxed;
s=selector1;
d=domain.com;
h=subject:from:to;
i=btt@domain.com;
bh=rcr9nmkeqsjAGn29CUiUNJFRSmc=;
b=

Команда RSA для подписи контента (заголовок + Dkimsignature)

openssl dgst -sha1 -sign privateKey.pem content.txt | base64
0 голосов
/ 18 июня 2019
subject:ddddd
from:btt@domain.com
to:email@gmail.com
dkim-signature:v=1; a=rsa-sha1; c=relaxed/relaxed; s=selector1; d=domain.com; h=subject:from:to; i=btt@domain.com; bh=rcr9nmkeqsjAGn29CUiUNJFRSmc=; b=
0 голосов
/ 16 июня 2019

Все это объяснено в этом документе: https://www.ietf.org/rfc/rfc6376.txt

Сначала вы должны канонизировать поля заголовков, которые вы хотите подписать, включая заголовок DKIM-Signature, который вы собираетесь сгенерировать, а затем подписывать его, используя выбранный вами алгоритм подписи.

«Простой» алгоритм канонизации заголовка

«Простой» алгоритм канонизации заголовка не меняет заголовок поля никак. Поля заголовка ДОЛЖНЫ быть представлены подписи или алгоритм проверки в точности, как они есть в сообщении подписано или проверено. В частности, имена полей заголовка НЕ ​​ДОЛЖНЫ быть сложенный регистр и пробел НЕ ДОЛЖНЫ быть изменены.

Алгоритм канонизации "расслабленного" заголовка

НЕОБХОДИМО, чтобы алгоритм канонизации "расслабленного" заголовка применял следующие шаги по порядку:

  • Преобразовать все имена полей заголовка (не значения полей заголовка) в в нижнем регистре. Например, преобразуйте «SUBJect: AbC» в «subject: AbC».

  • Развернуть все строки продолжения поля заголовка, как описано в RFC5322 ; в частности, строки с терминаторами, встроенными в продолженные значения поля заголовка (то есть последовательности CRLF, сопровождаемые WSP) ДОЛЖЕН интерпретироваться без CRLF. Реализации ДОЛЖНЫ НЕ удаляйте CRLF в конце значения поля заголовка.

  • Преобразование всех последовательностей из одного или нескольких символов WSP в один SP персонаж. WSP-символы включают в себя символы до и после линия сгиба границы.

  • Удалить все символы WSP в конце каждого развернутого поля заголовка значение.

  • Удалите все символы WSP, оставшиеся до и после двоеточия отделяя имя поля заголовка от значения поля заголовка. ДОЛЖЕН быть сохранен разделитель двоеточия.

Канонизация заголовка DKIM-Signature

Как только вы канонизируете все остальные заголовки, которые хотите подписать, вам нужно применить ту же канонизацию к подписи DKIM, которую вы генерируете.

Очевидно, что в этот момент у вас еще не будет значения b=, потому что результатом подписания канонизированных заголовков является значение для тега b=.

Вам нужно создать заголовок, но оставить тег b= пустым.

Например:

DKIM-Signature: v=1; a=rsa-sha256; d=example.net; s=brisbane;
  c=simple; q=dns/txt; i=@eng.example.net;
  t=1117574938; x=1118006938;
  h=from:to:subject:date;
  bh=MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=;
  b=

Подписание канонизированных заголовков

Как только вы канонизировали все заголовки, которые хотите подписать (плюс часть генерируемого вами заголовка DKIM-Signature), вам необходимо подписать результат, используя алгоритм и закрытый ключ (а не открытый ключ! !), а затем base64 кодирует результат и добавляет его в сгенерированный вами заголовок DKIM-Signature.

В приведенном выше примере вы будете использовать алгоритм RSA-SHA256.

Обновление:

Если заголовки исходного сообщения, которое вы хотите подписать, выглядят так:

Subject: ddddd
From: btt@domain.com
To: email@gmail.com

И если заголовок DKIM-Signature, который генерирует PowerMTA, выглядит следующим образом:

DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=selector1; d=domain.com; h=Subject:From:To; i=btt@domain.com; bh=rcr9nmkeqsjAGn29CUiUNJFRSmc=; b=j/jYKloUFEbmzj5JdwmR7MCBB+UtuJq5V0wImYElaY/xob8CnRY39Z0TfPonp4y2qtIE/wpqwnT0
 YrHcNM8BY3uQ3ovm3pq7lTmwvM6XqA4rgnlhcyZnQO9uoUSGebsbR8KBhwZSpolF7UEcr8TSQdfO
 OG+fDZIHeq6G7DAg5cQ=

Тогда текст, который вы должны подписать, будет выглядеть следующим образом (при условии, что вы хотите, чтобы значение b= совпадало со значением b=, которое генерирует PowerMTA):

subject:ddddd
from:btt@domain.com
to:email@gmail.com
dkim-signature:v=1; a=rsa-sha1; c=relaxed/relaxed; s=selector1; d=domain.com; h=Subject:From:To; i=btt@domain.com; bh=rcr9nmkeqsjAGn29CUiUNJFRSmc=; b=
...