
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:
Загрузите файл cacert.pem: Сначала загрузите файл cacert.pem на свой CentOS VPS. Для этого вы можете использовать безопасные методы передачи файлов, такие как SCP или SFTP.
Определите местоположение хранилища сертификатов: Местоположение хранилища сертификатов может меняться в зависимости от приложений, с которыми вы хотите его использовать. Для общесистемного доверия вы обычно можете поместить сертификат в /etc/pki/tls/certs/.
Копирование файла сертификата: Скопируйте файл cacert.pem в хранилище сертификатов:
sudo cp cacert.pem /etc/pki/tls/certs/
Обновление пакета сертификатов CA: Чтобы обновить пакет сертификатов CA, выполните следующую команду:
sudo update-ca-trust enable
Обновите доверие CA: Обновите доверие CA с помощью команды update-ca-trust extract:
sudo update-ca-trust extract
Проверьте установку сертификата: Вы можете убедиться, что сертификат был успешно установлен, проверив комплект CA:
cat /etc/pki/tls/certs/ca-bundle.crt
содержимоеcacert.pem
должно быть включено в этот комплект.Перезапустите 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****