Я уже некоторое время работаю с API, с которым вызовы работают большую часть времени, однако иногда (1-2 раза в день в течение часа, хотя это совершенно непредсказуемо, когда и как долго!) Я получаю следующее сообщение об ошибке:
«Произошла ошибка: SSL: альтернативное имя субъекта сертификата не соответствует имени целевого хоста 'api.xxxxx.com'»
Я отслеживал api как с помощью запланированных вызовов с моего сервера, так и извне с помощью runcope, а также вручную с помощью Postman. Когда у моих обращений к серверу возникает проблема, и почтальон не предполагает, что это проблема на моей стороне.
К вашему сведению, я запрашиваю api с сервера linux, используя PHP для запуска базовой аутентификации как с file_get_contents, так и с Curl - оба подхода отображают одну и ту же проблему.
Поработав с суперполезной командой разработчиков разработчиков api, выяснилось, что при использовании команды openssl:
эхо | openssl s_client -showcerts -servername api.XXXXX.com -connect api.XXXXX.com:443 2> / dev / null | openssl x509 -inform pem -noout -text
мой сервер каким-то образом указывает домен api на мой собственный, т.е. эта команда выводит мой собственный сертификат ssl, а не сертификат api.
Кто-нибудь знает, как это исправить и / или остановить это снова?
альтернативное имя субъекта - это способ использования одного сертификата для нескольких виртуальных хостов - вы, по сути, получаете ошибку несоответствия имени при подключении к серверу, в какой-то момент вы подключаетесь к защищенному URL-адресу, о котором сертификат ничего не знает, вставьте все URL-адреса ваших конечных точек API в эту проверку https://www.digicert.com/help/
если у вас есть api myapi.example.com и подписанный сертификат, вы не сможете выполнять безопасные вызовы myotherapi.example.com, если вы не указали myotherapi.example.com в качестве альтернативного имени субъекта или у вас нет сертификата с подстановочными знаками.
тот факт, что он делает это только один раз в день, может быть связан с балансировкой нагрузки, если у вас есть 2 или более серверов в пуле с балансировкой нагрузки, убедитесь, что разгрузка SSL применяется к обоим серверам - иначе балансировщик нагрузки может иногда направлять вас на хост с самоподписанным сертификатом (если вы зашифровали канал между балансировщиком нагрузки и хостами) - если серверы являются балансировка нагрузки и SSL отключен для обоих серверов правильно - затем убедитесь, что apache ServerName точно такое же, то есть не api1.example.com и api2.example.com
наконец, убедитесь, что у вас есть только одна запись DNS, указывающая на виртуальный IP-адрес балансировщика нагрузки.