Bluehost — хост предоставил неверный сертификат для вызова API к Twilio

Bluehost — хост предоставил неверный сертификат для вызова API к Twilio

Bluehost VPSработает CentOS, но cat /etc/redhat-releaseраскрывает CloudLinux release 6.10 (Final).

Выполнение команд curl против API Twilio на моем локальном ПК (Win11/IIS/PHP) работает нормально. Когда я пытаюсь сделать то же самое на моем сервере Bluehost (с включенным подробным выводом), он терпит неудачу с этим сообщением:

Имя субъекта сертификата «*.us-east-1.es.amazonaws.com» не соответствует имени целевого хоста «api.twilio.com»

* About to connect() to api.twilio.com port 443 (#0)
*   Trying 50.19.189.95... connected
* Connected to api.twilio.com (50.19.189.95) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* SSL: certificate subject name '*.us-east-1.es.amazonaws.com' does not match target host name 'api.twilio.com'
* NSS error -12276
* Closing connection #0
curl: (51) SSL: certificate subject name '*.us-east-1.es.amazonaws.com' does not match target host name 'api.twilio.com'

Поддержка Twilio посоветовала мне загрузить их SSL-сертификат через Chrome, что я и сделал. Я назвал сертификат "cacert.pem", думая, что именно так его и нужно назвать, но я понятия не имею. И вот шаги, которые они заставили меня выполнить в моем терминале bash:

  1. Загрузите файл cacert.pem: Сначала загрузите файл cacert.pem на свой CentOS VPS. Для этого вы можете использовать безопасные методы передачи файлов, такие как SCP или SFTP.

  2. Определите местоположение хранилища сертификатов: Местоположение хранилища сертификатов может меняться в зависимости от приложений, с которыми вы хотите его использовать. Для общесистемного доверия вы обычно можете поместить сертификат в /etc/pki/tls/certs/.

  3. Копирование файла сертификата: Скопируйте файл cacert.pem в хранилище сертификатов: sudo cp cacert.pem /etc/pki/tls/certs/

  4. Обновление пакета сертификатов CA: Чтобы обновить пакет сертификатов CA, выполните следующую команду: sudo update-ca-trust enable

  5. Обновите доверие CA: Обновите доверие CA с помощью команды update-ca-trust extract: sudo update-ca-trust extract

  6. Проверьте установку сертификата: Вы можете убедиться, что сертификат был успешно установлен, проверив комплект CA: cat /etc/pki/tls/certs/ca-bundle.crt содержимое cacert.pemдолжно быть включено в этот комплект.

  7. Перезапустите Apache.


Ничего из этого не помогло, и неправильный сертификат по-прежнему предъявлен.

Я спросил их: «Откуда ОС знает, какой сертификат использовать?» Но они не ответили. Похоже, это никогда не было указано.

Я запустил команду curl (обратите внимание, я использую ее -kдля небезопасности, просто чтобы посмотреть, что произойдет) в API Twilio и получил следующую ошибку:

Заголовок авторизации требует параметр «Credential». Заголовок авторизации требует параметр «Signature». Заголовок авторизации требует параметр «SignedHeaders». Заголовок авторизации требует наличие заголовка «X-Amz-Date» или «Date». Authorization=Basic QUNmN***

Я провел две следующие digдиагностики на сервере Bluehost:

dig api.twilio.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.8 <<>> api.twilio.com ;; глобальные параметры: +cmd ;; Получен ответ: ;; ->>HEADER<<- код операции: ЗАПРОС, статус: NOERROR, идентификатор: 58818 ;; флаги: qr rd ra; ЗАПРОС: 1, ОТВЕТ: 9, ПОЛНОМОЧИЯ: 0, ДОПОЛНИТЕЛЬНО: 0

;; РАЗДЕЛ ВОПРОСОВ: ;api.twilio.com. В

;; РАЗДЕЛ ОТВЕТОВ: api.twilio.com. 20 В CNAME
virginia.us1.api-lb.twilio.com. virginia.us1.api-lb.twilio.com. 20 В CNAME self-healing.api-alb.us1.api-lb.twilio.com. self-healing.api-alb.us1.api-lb.twilio.com. 20 В CNAME ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 В А 34.204.146.75 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 В А 52.20.98.48 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 В А 35.153.214.247 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 В А 54.208.14.118 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 В А 54.242.5.138 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 В А 34.232.251.189

;; Время запроса: 10 мсек ;; СЕРВЕР: 1.1.1.1#53(1.1.1.1) ;; КОГДА: Пт Ноя 3 08:51:38 2023 ;; РАЗМЕР СООБЩЕНИЯ получено: 260

dig api.twilio.com @8.8.8.8

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.8 <<>> api.twilio.com @8.8.8.8 ;; глобальные параметры: +cmd ;; Получен ответ: ;; ->>HEADER<<- код операции: ЗАПРОС, статус: NOERROR, идентификатор: 58143 ;; флаги: qr rd ra; ЗАПРОС: 1, ОТВЕТ: 9, ПОЛНОМОЧИЯ: 0, ДОПОЛНИТЕЛЬНО: 0

;; РАЗДЕЛ ВОПРОСОВ: ;api.twilio.com. В

;; РАЗДЕЛ ОТВЕТОВ: api.twilio.com. 21 В CNAME
virginia.us1.api-lb.twilio.com. virginia.us1.api-lb.twilio.com. 21 В CNAME self-healing.api-alb.us1.api-lb.twilio.com. self-healing.api-alb.us1.api-lb.twilio.com. 21 В CNAME ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 В А 3.222.47.158 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 В А 34.236.63.82 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 В А 52.0.177.50 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 В А 34.232.27.126 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 В А 3.225.164.19 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 В А 52.206.184.52

;; Время запроса: 23 мсек ;; СЕРВЕР: 8.8.8.8#53(8.8.8.8) ;; КОГДА: Пт Ноя 3 08:52:11 2023 ;; РАЗМЕР СООБЩЕНИЯ получено: 261

4 ноября я попробовал сделать следующее, следуя совету Турди:

curl -v --tlsv1.2 -X POST "https://api.twilio.com/2010-04-01/Accounts/ACf7b58ec793***4d/Messages.json" \
> --data-urlencode "Body=This is the ship that made the Kessel Run in fourteen parsecs?" \
> --data-urlencode "From=+14*****40" \
> --data-urlencode "To=+18*****44" \
> -u ACf7b*****30a4d:0ce7445d*****48bc4d

РЕЗУЛЬТАТ:

  • Собираюсь подключиться() к api.twilio.com порт 443 (#0)
  • Попытка 50.19.189.95... Время ожидания истекло
  • Попытка 35.168.202.10... Время ожидания истекло
  • Попытка 54.173.225.186... Время ожидания истекло
  • Попытка 107.22.7.7... Время ожидания истекло
  • Попытка 52.204.229.116... подключено
  • Подключено к api.twilio.com (52.204.229.116) порт 443 (#0)
  • Инициализация NSS с помощью certpath: sql:/etc/pki/nssdb
  • CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: нет
  • SSL: имя субъекта сертификата «*.glympse.com» не соответствует имени целевого хоста «api.twilio.com»
  • Ошибка НСС -12276
  • Закрытие соединения № 0 curl: (51) SSL: имя субъекта сертификата «*.glympse.com» не соответствует имени целевого хоста «api.twilio.com»

Я также попробовал следующее 4 ноября, следуя совету Турди:

openssl s_client -connect api.twilio.com

РЕЗУЛЬТАТ:

порт не определен

(После этого он выдал кучу доступных аргументов, вроде документации. Не уверен, что вам это было нужно.)

Я разработчик, но новичок в Linux и сертификатах, поэтому надеюсь, что кто-то сможет мне помочь. Заранее спасибо.

решение1

Согласно моим исследованиям, это проблема с curl.

Вам нужно использовать curl -v --tlsv1.2

Похоже, что это похожая проблема, с которой сталкивается ТС.

https://blog.michaelfmcnamara.com/2015/12/curl-and-ssl-tls-issues/

Похоже, что в вашем curl вы отправляете сертификат с glympse.com NSS с certpath: sql:/etc/pki/nssdb. Это вызывает несоответствие, потому что twilio.com и glympse — это разные имена. Я думаю, вам нужно проверить на twilio.com, какой сертификат вам нужно использовать для подключения к API. Также похоже, что вы используете nssdb и базу данных sql, я ничего об этом не знаю.

Последняя строка в curl четко указывает на несоответствие сертификата Closing connection #0 curl: (51) SSL: certificate subject name '*.glympse.com' does not match target host name 'api.twilio.com'

Редактировать

Где ваш ключ API в этом? Проверьте документацию

curl -v --tlsv1.2 -X POST "https://api.twilio.com/2010-04-01/Accounts/ACf7b58ec793***4d/Messages.json" \
> --data-urlencode "Body=This is the ship that made the Kessel Run in fourteen parsecs?" \
> --data-urlencode "From=+14*****40" \
> --data-urlencode "To=+18*****44" \
> -u ACf7b*****30a4d:0ce7445d****

Связанный контент