Bluehost - Twilio への API 呼び出しに対してホストが提示した証明書が間違っている

Bluehost - Twilio への API 呼び出しに対してホストが提示した証明書が間違っている

ブルーホストVPSCentOSを実行が、cat /etc/redhat-release明らかにしますCloudLinux release 6.10 (Final)

ローカル PC (Win11/IIS/PHP) 上の Twilio API に対して curl コマンドを実行すると、正常に動作します。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. Apache を再起動します。


どれも効果がなく、間違った証明書が依然として提示されています。

「OS はどの証明書を使用するかをどのように認識するのですか?」と尋ねましたが、回答はありませんでした。そのことは一度も指定されていなかったようです。

Twilio API に対してcurl コマンドを実行したところ (-k何が起こるかを確認するために insecure を使用していることに注意してください)、次のエラーが発生しました。

認証ヘッダーには「Credential」パラメータが必要です。認証ヘッダーには「Signature」パラメータが必要です。認証ヘッダーには「SignedHeaders」パラメータが必要です。認証ヘッダーには「X-Amz-Date」または「Date」ヘッダーのいずれかが必要です。Authorization=Basic 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<<- オペコード: QUERY、ステータス: NOERROR、ID: 58818 ;; フラグ: qr rd ra; クエリ: 1、回答: 9、権限: 0、追加: 0

;; 質問セクション: ;api.twilio.com. IN A

;; 回答セクション: 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. self-healing.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 IN A 34.232.251.189

;; クエリ時間: 10 ミリ秒 ;; サーバー: 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<<- オペコード: QUERY、ステータス: NOERROR、ID: 58143 ;; フラグ: qr rd ra; クエリ: 1、回答: 9、権限: 0、追加: 0

;; 質問セクション: ;api.twilio.com. IN A

;; 回答セクション: 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. self-healing.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

;; クエリ時間: 23 ミリ秒 ;; サーバー: 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 CAパス: なし
  • SSL: 証明書のサブジェクト名 '*.glympse.com' がターゲット ホスト名 'api.twilio.com' と一致しません
  • NSS エラー -12276
  • 接続 #0 を閉じています curl: (51) SSL: 証明書のサブジェクト名 '*.glympse.com' がターゲット ホスト名 'api.twilio.com' と一致しません

また、Turdie の提案に基づいて、NOV-4 で次のことを試しました。

openssl s_client -connect api.twilio.com

結果:

ポートが定義されていません

(その後、ドキュメントなどの利用可能な引数が大量に出力されました。それが必要なのかどうかはわかりません。)

私は開発者ですが、Linux と認定資格に関しては初心者なので、誰かが助けてくれることを願っています。よろしくお願いします。

答え1

私の調査によると、これは curl の問題です。

使用する必要がある curl -v --tlsv1.2

これはTSが経験している問題と似ているようです

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

curl では、certpath: sql:/etc/pki/nssdb の glympse.com NSS で証明書を送信しているようです。twilio.com と glympse は名前が異なるため、不一致が発生します。API に接続するためにどの証明書を使用する必要があるかを twilio.com で確認する必要があると思います。また、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****

関連情報