Amazon SES: PKIX path building failed

Проблема: при попытке отправить email через Amazon SES, приложение валит ошибками вида PKIX path building failed.

Причины: банально, но похоже у вас “протух” сертификат “амазона”.

Когда я столкнулся с этой проблемой, java-приложение использовало контейнер сертифитатов формата JKS. И когда я его пролистал, то подозрение по истёкшему сертификату подтвердилось. Решение напрашивается само собой: импортировать в контейнер свежий/актульный сертификат. Вот только где его взять?

Решение:

  1. В терминале на сервере (ну или можете у себя локально в linux среде) выполнить команду:
openssl s_client -connect email.eu-west-1.amazonaws.com:443

Адрес и порт email.eu-west-1.amazonaws.com:443 у вас может быть другим - смотрите по ситуации.

На выходе команды получим много текста, но нам нужен только блок сертификата:

-----BEGIN CERTIFICATE-----
. . .
-----END CERTIFICATE-----
  1. Сохраняем этот сертификат (вместе с BEGIN и END стоками) в файл aws_ses.crt

  2. Импортируем этот сертификат в контейнер сертификатов:

keytool -import -file aws_ses.crt -alias 'aws ses' -keystore tls/keystore.jks

Будет вначале запрошен пароль от keystore.jks, затем спросят “хотим ли мы доверять импортированному сертификату”. Отвечаем yes.

Enjoy.

Теперь письма должны отправляться.