У меня не так в сертификате, и у меня возникает следующая проблема, которую я пытаюсь отладить.
Java приложение пытается подключиться к внешнему API через HTTPS proticol, но в журнале приложений я получаю следующее сообщение об ошибке:
TID: [-1] [] [2020-02-29 13:34:58,686] ERROR {org.apache.synapse.transport.passthru.SourceHandler} - I/O error: Received fatal alert: certificate_unknown {org.apache.synapse.transport.passthru.SourceHandler}
javax.net.ssl.SSLException: Received fatal alert: certificate_unknown
Поэтому я попросил ребят, управляющих машиной, на которой размещен этот внешний API, предоставить мне сертификат. Они отправляют мне самозаверяющий сертификат .
Итак, сначала я попытался выполнить вызов API с помощью cURL с того же компьютера, на котором развернуто мое приложение.
Первым делом я попытался выполнить вызов API с помощью опции -k в запросе cURL :
curl -k -X POST "https://MY_HOST_NAME/cmd/j/" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"header\": { \"msgUid\": \"a36bea3f-6dc6-49d7-9376-f31692930ba9\",..........................}}"
Как я могу прочитать на cURL документация: https://gist.github.com/eneko/dc2d8edd9a4b25c5b0725dd123f98b10
-k или - небезопасные разрешают подключения к сайтам SSL без сертификатов. Работает нормально. API возвращает ожидаемый ответ.
Затем я пытаюсь использовать предоставленный сертификат, поэтому теперь я выполнил запрос cURL , включая этот сертификат, следующим образом:
curl --cacert /home/my_username/ca.crt -X POST "https://MY_HOST_NAME/cmd/j/" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"header\": { \"msgUid\": \"a36bea3f-6dc6-49d7-9376-f31692930ba9\",..........................}}"
Как видите, я включил предоставленный сертификат, используя опцию - cacert . Проблема в том, что теперь я получаю следующую ошибку:
curl: (51) SSL: no alternative certificate subject name matches target hostname MY_HOST_NAME
Что это значит? Может ли этот сертификат быть неправильным? Я подозреваю, что проблема заключается в предоставленном сертификате по 2 причинам:
1) Открытие сертификата в Windows Я получаю что-то вроде этого:
Я заметил, что значение поля CN (которое должно представлять имя сервера, защищенного сертификатом SSL ) отличается от имени хоста, вызываемого в моем API ( что я скрыл как MY_HOST_NAME в предыдущем запросе). Кажется, что сертификат связан с другим именем хоста.
Моя проблема может быть связана с этим?
2) Парень, который прислал мне сертификат, написал мне что-то вроде этого:
Это сертификат (и он прикрепил его к почте), я предлагаю вам установить igore параметры, связанные с ошибкой сертификата, при использовании его в DMZ (и вызывающая машина должна быть в этой DMZ), потому что он самоподписан и поэтому также следует изменить альтернативное имя внутри сертификата.
Поэтому я подозреваю, что этот сертификат не годится, поскольку указывает на другое имя сервера.
Правильно ли мое обоснование? Меня абсолютно не интересует SSL-сертификат, и я спрашиваю: есть ли способ изменить это имя самостоятельно, или они должны предоставить мне новый сертификат с правильным именем?