Использование программного компонента#
В данном разделе представлена информация об отправке 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 |
любая строка |
Ответ#
Формат ответа такой же, как с выключенным флагом шифрования (см. выше).