Использование программного компонента#

В данном разделе представлена информация об отправке POST-запроса для Istnomnia через утилиту cURL.

Описание механизма шифрования#

При асимметричном шифровании используется пара из двух ключей:

  • приватный ключ;

  • публичный ключ.

При отправке писем АС шифрует данные, а программный компонент расшифровывает их. Приватный ключ используется для шифрования и должен храниться в секрете на стороне программного компонента. Публичный ключ используется для дешифрования и может свободно передаваться и использоваться на стороне АС. Вектор шифрования представляет собой случайно-сгенерированную строку. Его цель — обеспечить уникальность шифра при шифровании одинаковых данных с одним и тем же ключом, чтобы предотвратить выявление закономерностей и повысить безопасность. Вектор шифрования обычно передается вместе с зашифрованным сообщением.

Программный компонент на своей стороне генерирует пару из приватного и публичного ключа с помощью стандартных утилит (например, openssl, keytool). Далее публичный ключ передаётся АС.
Для шифрования используется алгоритм «AES/GCM/NoPadding»

Приватный ключ программного компонента хранится в секрете на стороне программного компонента в JKS-файле в SecMan. Публичный ключ программный компонент хранится на стороне АС

При получении писем программный компонент шифрует данные, а АС дешифрует их. Для дешифрования данных используется пара приватного и публичного ключей, сгенерированных на стороне АС. АС передаёт программному компоненту свой публичный ключ для того, чтобы программный компонент зашифровал данные. После этого АС может расшифровать эти данные с помощью своего приватного ключа.

Для расшифрования данных АС использует 3 компонента:

  • зашифрованные данные;

  • вектор, который передал программный компонент;

  • собственный приватный ключ.

Для расшифрования можно использовать стандартные библиотеки.

Описание параметров запроса#

Информация об отправке запроса через Insomnia описан в разделе «Быстрый старт» документа «Руководство прикладного разработчика».

Формат запроса зависит от включенного флага «Требуется ли шифрование тела и темы письма?» на почтовом ящике, добавленного в UI программного компонента.

Отправка запроса через cURL с выключенным флагом шифрования#

Для отправки запроса потребуется:

  • приватный ключ сертификата клиента;

  • публичный сертификат клиента;

  • сертификат(-ы) Удостоверяющего центра для проверки сертификата вызываемого сервиса;

  • Примечание: Создание ключа и выпуск сертификата не регламентируется. Утилиту cURL можно скачать с ресурса: https://curl.se/download.html

Запрос#

Заголовки

Параметр

Тип данных

Обязательность

Описание

Допустимые значения

Content-Type

string

да

Тип содержимого запроса и кодировка

application/json;charset=UTF-8

Email-From

string

да

Почтовый адрес ящика-отправителя письма

^[_A-Za-z0-9-+А-Яа-я]+(.[_A-Za-z0-9-А-Яа-я]+)@[A-Za-z0-9-А-Яа-я]+(.[A-Za-z0-9-А-Яа-я]+)(.[A-Za-zА-Яа-я]{2,})$

Тело запроса

Параметр

Тип данных

Обязательность

Описание

Допустимые значения

to

string[]

да

Массив адресов-получателей

^[_A-Za-z0-9-+А-Яа-я]+(.[_A-Za-z0-9-А-Яа-я]+)@[A-Za-z0-9-А-Яа-я]+(.[A-Za-z0-9-А-Яа-я]+)(.[A-Za-zА-Яа-я]{2,})$

cc

string[]

да

Массив адресов-получателей для отправки копии письма

любая строка формата xxxx@xxxxx.xx

bodyType

string

да

Формат сообщения

text/plain или text/html

importance

string

нет

Важность сообщения

high или low или normal, по умолчанию normal

subject

string

да

Тема письма

любая строка

messageId

string

да

Уникальный идентификатор сообщения на стороне АС-отправителе

любая строка

secret

string

да

Токен, генерируемый в настройках почтового ящика панели администратора программного компонента

любая строка

body

string

да

Тело сообщения в формате bodyType

любая строка

Пример:

curl --request POST https://${host}/send \
    -H "Content-Type: application/json;charset=UTF-8" \
    -H "Email-From: mail@example.com" \
    -d '{
            "messageId": "test_unique_message_id"
            "bodyType": "text/plain",
            "importance": "high",
            "to": ["mail@example.com"],
            "subject": "Just subject",
            "secret": "mailbox_token",            
            "body": "Just body",
        }' \
    --cacert rootCA.crt \
    --key client.key \
    --cert client.crt

Описание параметров

Параметр

Тип данных

Обязательность

Описание

host

string

да

Имя хоста целевого сервиса

–key

string

да

Приватный ключ сертификата клиента, используемый при создании защищенного соединения

–cert

string

да

Публичный сертификат клиента, используемый при создании защищенного соединения

–cacert

string

да

Сертификат Удостоверяющего центра для проверки сертификата вызываемого сервиса

Ответ#

Пример:

{
  "code": -1,
  "message": "Ошибка обработки запроса",
  "timestamp": "2022-09-29T14:14:20.435",
  "data": {
    "description": "Ошибка",
    "explanation": "Ошибка парсинга запроса; Неверный ID почтового ящика",
    "transactionId": "DBB7EC132EBA408F8FB3389C18D0D416",
    "messageId": "${messageId}"
  }
}

Параметры ответа:

Параметр

Тип данных

Описание

code

boolean

Код ответа: -1 для ошибки запроса, 0 для успешного запроса

message

String

Краткое описание ошибки

timestamp

Timestamp

Время ответа. Пример: 2022-09-29T14:14:20.435

description

String

краткое описание ошибки

explanation

String

детальное описание ошибки

transactionId

String

уникальный идентификатор транзакции

messageId

String

уникальный идентификатор сообщения на стороне АС-отправителе

Отправка запроса через cURL со включенным флагом шифрования#

Если флаг шифрования включен, то программный компонент перед обработкой запроса будет производить расшифровку темы и тела письма. АС-отправитель должен зашифровать тему и тело запроса ключом и вектором инициализации.

Запрос#

Заголовки запроса соответствуют заголовкам, указанным в формате с выключенным флагом шифрования (см. выше).

В тело запроса добавляются следующие поля:

Параметр

Тип данных

Обязательность

Описание

Допустимые значения

messageKey

string

да

Ключ для дешифрования в base64

любая строка

messageVector

string

да

Вектор инициализации в base64

любая строка

subject

string

да

Тема письма, зашифрованная ключом и вектором инициализации, в base64

любая строка

body

string

да

Тело сообщения в формате bodyType, зашифрованное ключом и вектором инициализации, в base64

любая строка

Ответ#

Формат ответа такой же, как с выключенным флагом шифрования (см. выше).