Почему я получаю эту ошибку сертификата, пытаясь выполнить этот запрос cURL? SSL: альтернативное имя субъекта сертификата не соответствует целевому имени хоста - PullRequest
1 голос
/ 08 марта 2020

У меня не так в сертификате, и у меня возникает следующая проблема, которую я пытаюсь отладить.

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 Я получаю что-то вроде этого:

enter image description here

Я заметил, что значение поля CN (которое должно представлять имя сервера, защищенного сертификатом SSL ) отличается от имени хоста, вызываемого в моем API ( что я скрыл как MY_HOST_NAME в предыдущем запросе). Кажется, что сертификат связан с другим именем хоста.

Моя проблема может быть связана с этим?

2) Парень, который прислал мне сертификат, написал мне что-то вроде этого:

Это сертификат (и он прикрепил его к почте), я предлагаю вам установить igore параметры, связанные с ошибкой сертификата, при использовании его в DMZ (и вызывающая машина должна быть в этой DMZ), потому что он самоподписан и поэтому также следует изменить альтернативное имя внутри сертификата.

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

Правильно ли мое обоснование? Меня абсолютно не интересует SSL-сертификат, и я спрашиваю: есть ли способ изменить это имя самостоятельно, или они должны предоставить мне новый сертификат с правильным именем?

...