Bluehost - Twilio에 대한 API 호출을 위해 호스트가 제시한 잘못된 인증서

Bluehost - Twilio에 대한 API 호출을 위해 호스트가 제시한 잘못된 인증서

블루호스트 VPSCentOS 실행, 그러나 cat /etc/redhat-release공개합니다 CloudLinux release 6.10 (Final).

내 로컬 PC(Win11/IIS/PHP)에서 Twilio API에 대해 컬 명령을 실행하면 제대로 작동합니다. 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 지원팀에서는 Chrome을 통해 SSL 인증서를 다운로드하라고 지시했고 저는 그렇게 했습니다. 인증서 이름을 "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 신뢰 새로 고침: update-ca-trust extract 명령을 사용하여 CA 신뢰를 업데이트합니다. sudo update-ca-trust extract

  6. 인증서 설치 확인: CA 번들을 확인하여 인증서가 성공적으로 설치되었는지 확인할 수 있습니다. cat /etc/pki/tls/certs/ca-bundle.crt 콘텐츠 cacert.pem는 이 번들에 포함되어야 합니다.

  7. 아파치를 다시 시작하십시오.


그 어느 것도 차이를 가져오지 않았으며 잘못된 인증서가 여전히 표시됩니다.

나는 그들에게 "어떤 인증서를 사용해야 할지 OS가 어떻게 알 수 있나요?"라고 물었습니다. 그러나 그들은 응답하지 않았습니다. 지정되지 않은 것 같습니다.

-kTwilio API에 대해 컬 명령(어떤 일이 일어날지 확인하기 위해 안전하지 않은 명령을 사용함)을 실행했는데 다음 오류가 발생했습니다.

인증 헤더에는 'Credential' 매개변수가 필요합니다. 인증 헤더에는 '서명' 매개변수가 필요합니다. 인증 헤더에는 'SignedHeaders' 매개변수가 필요합니다. 승인 헤더에는 'X-Amz-Date' 또는 'Date' 헤더가 있어야 합니다. 인증=기본 QUNmN***

digBluehost 서버에서 다음 2가지 진단을 실행했습니다 .

dig api.twilio.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.8 <<>> api.twilio.com ;; 전역 옵션: +cmd ;; 답을 얻었습니다: ;; ->>HEADER<<- opcode: QUERY, 상태: NOERROR, id: 58818 ;; 플래그: qr rd ra; 질의: 1, 답변: 9, 권한: 0, 추가: 0

;; 질문 섹션: ;api.twilio.com. 안에

;; 답변 섹션: api.twilio.com. 20 IN CNAME
virginia.us1.api-lb.twilio.com. virginia.us1.api-lb.twilio.com. 20 IN CNAME self-healing.api-alb.us1.api-lb.twilio.com. 자가 치유.api-alb.us1.api-lb.twilio.com. 20 IN CNAME ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 IN A 34.204.146.75 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 IN A 52.20.98.48 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 IN A 35.153.214.247 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 IN A 54.208.14.118 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 IN A 54.242.5.138 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 34.232.251.189에

;; 쿼리 시간: 10msec ;; 서버: 1.1.1.1#53(1.1.1.1) ;; 일시: 2023년 11월 3일 금요일 08:51:38 ;; MSG 크기 수신: 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<<- opcode: QUERY, 상태: NOERROR, id: 58143 ;; 플래그: qr rd ra; 질의: 1, 답변: 9, 권한: 0, 추가: 0

;; 질문 섹션: ;api.twilio.com. 안에

;; 답변 섹션: api.twilio.com. 21 IN CNAME
virginia.us1.api-lb.twilio.com. virginia.us1.api-lb.twilio.com. 21 IN CNAME self-healing.api-alb.us1.api-lb.twilio.com. 자가 치유.api-alb.us1.api-lb.twilio.com. 21 IN CNAME ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 IN A 3.222.47.158 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 IN A 34.236.63.82 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 IN A 52.0.177.50 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 IN A 34.232.27.126 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 IN A 3.225.164.19 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 IN A 52.206.184.52

;; 쿼리 시간: 23msec ;; 서버: 8.8.8.8#53(8.8.8.8) ;; 일시: 2023년 11월 3일 금요일 08:52:11 ;; MSG 크기 수신: 261

Turdie의 제안에 따라 NOV-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)에 연결됨
  • certpath로 NSS 초기화: sql:/etc/pki/nssdb
  • CA파일: /etc/pki/tls/certs/ca-bundle.crt CApath: 없음
  • SSL: 인증서 주체 이름 '*.glympse.com'이 대상 호스트 이름 'api.twilio.com'과 일치하지 않습니다.
  • NSS 오류 -12276
  • 연결 #0 종료 중 컬: (51) SSL: 인증서 주체 이름 '*.glympse.com'이 대상 호스트 이름 'api.twilio.com'과 일치하지 않습니다.

또한 Turdie의 제안에 따라 NOV-4에서 다음을 시도했습니다.

openssl s_client -connect api.twilio.com

결과:

포트가 정의되지 않았습니다

(그 후 문서와 같이 사용 가능한 인수가 엄청나게 많이 나옵니다. 원하는지 확실하지 않습니다.)

저는 개발자이지만 Linux 및 인증서에 대한 초보자이므로 누군가가 나를 도울 수 있기를 바랍니다. 미리 감사드립니다.

답변1

내 연구에 따르면 이것은 컬의 문제입니다.

당신은 사용해야합니다 curl -v --tlsv1.2

TS에서 겪고 있는 문제와 비슷한 문제인 것 같습니다.

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

컬에서 certpath: sql:/etc/pki/nssdb를 사용하여 glympse.com NSS로 인증서를 보내는 것 같습니다. twilio.com과 glympse는 이름이 다르기 때문에 불일치가 발생합니다. API에 연결하려면 어떤 인증서를 사용해야 하는지 twilio.com에서 확인해야 할 것 같습니다. 또한 귀하는 nssdb와 SQL 데이터베이스를 사용하고 있는 것 같습니다. 저는 이에 대해 전혀 모릅니다.

컬의 마지막 줄은 인증서 불일치를 명확하게 나타냅니다. 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****

관련 정보