Bluehost – vom Host falsches Zertifikat für API-Aufruf an Twilio vorgelegt

Bluehost – vom Host falsches Zertifikat für API-Aufruf an Twilio vorgelegt

Bluehost VPSmit CentOS, aber cat /etc/redhat-releaseverrät CloudLinux release 6.10 (Final).

Das Ausführen von Curl-Befehlen für Twilio-APIs auf meinem lokalen PC (Win11/IIS/PHP) funktioniert einwandfrei. Wenn ich dasselbe auf meinem Bluehost-Server versuche (mit aktivierter ausführlicher Ausgabe), schlägt es mit dieser Meldung fehl:

Der Zertifikatsinhabername „*.us-east-1.es.amazonaws.com“ stimmt nicht mit dem Zielhostnamen „api.twilio.com“ überein.

* 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'

Der Twilio-Support wies mich an, ihr SSL-Zertifikat über Chrome herunterzuladen, was ich auch tat. Ich nannte das Zertifikat „cacert.pem“, weil ich dachte, dass es so heißen muss, aber ich habe keine Ahnung. Und hier sind die Schritte, die ich in meinem Bash-Terminal ausführen sollte:

  1. Laden Sie die Datei cacert.pem hoch: Laden Sie zunächst die Datei cacert.pem auf Ihren CentOS VPS hoch. Sie können hierfür sichere Dateiübertragungsmethoden wie SCP oder SFTP verwenden.

  2. Bestimmen Sie den Speicherort des Zertifikatspeichers: Der Speicherort des Zertifikatspeichers kann je nach den Anwendungen, mit denen Sie ihn verwenden möchten, variieren. Für systemweites Vertrauen können Sie das Zertifikat normalerweise in /etc/pki/tls/certs/ ablegen.

  3. Kopieren Sie die Zertifikatsdatei: Kopieren Sie die Datei cacert.pem in den Zertifikatsspeicher: sudo cp cacert.pem /etc/pki/tls/certs/

  4. Aktualisieren Sie das CA-Zertifikatspaket: Um das CA-Zertifikatspaket zu aktualisieren, führen Sie den folgenden Befehl aus: sudo update-ca-trust enable

  5. Aktualisieren Sie das CA-Vertrauen: Aktualisieren Sie das CA-Vertrauen mit dem Befehl „update-ca-trust extract“: sudo update-ca-trust extract

  6. Überprüfen Sie die Zertifikatsinstallation: Sie können überprüfen, ob das Zertifikat erfolgreich installiert wurde, indem Sie das CA-Paket prüfen: cat /etc/pki/tls/certs/ca-bundle.crt Der cacert.pemInhalt sollte in diesem Paket enthalten sein.

  7. Starten Sie Apache neu.


Nichts davon hat einen Unterschied gemacht und es wird immer noch das falsche Zertifikat vorgelegt.

Ich habe sie gefragt: „Woher weiß das Betriebssystem, welches Zertifikat verwendet werden soll?“ Aber sie haben nicht geantwortet. Das scheint nie angegeben worden zu sein.

Ich habe einen Curl-Befehl (beachten Sie, dass ich ihn -kfür unsicher verwende, nur um zu sehen, was passieren würde) für die Twilio-API ausgeführt und den folgenden Fehler erhalten:

Autorisierungsheader erfordert den Parameter „Credential“. Autorisierungsheader erfordert den Parameter „Signature“. Autorisierungsheader erfordert den Parameter „SignedHeaders“. Autorisierungsheader erfordert entweder das Vorhandensein eines „X-Amz-Date“- oder eines „Date“-Headers. Autorisierung=Basic QUNmN***

Ich habe die folgenden zwei digDiagnosen auf dem Bluehost-Server ausgeführt:

dig api.twilio.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.8 <<>> api.twilio.com ;; globale Optionen: +cmd ;; Antwort erhalten: ;; ->>HEADER<<- Opcode: QUERY, Status: NOERROR, ID: 58818 ;; Flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTORITY: 0, ADDITIONAL: 0

;; FRAGENABSCHNITT: ;api.twilio.com. IN A

;; ANTWORT-ABSCHNITT: 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

;; Abfragezeit: 10 ms ;; SERVER: 1.1.1.1#53(1.1.1.1) ;; WANN: Fr., 3. November 2023, 08:51:38 ;; Empfangene MSG-Größe: 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 ;; globale Optionen: +cmd ;; Antwort erhalten: ;; ->>HEADER<<- Opcode: QUERY, Status: NOERROR, ID: 58143 ;; Flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTORITY: 0, ADDITIONAL: 0

;; FRAGENABSCHNITT: ;api.twilio.com. IN A

;; ANTWORT-ABSCHNITT: 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

;; Abfragezeit: 23 ms ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WANN: Fr., 3. Nov. 2023, 08:52:11 ;; Empfangene MSG-Größe: 261

Basierend auf Turdies Vorschlag habe ich am 4. November Folgendes ausprobiert:

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

ERGEBNIS:

  • Im Begriff, eine Verbindung zu api.twilio.com Port 443 (#0) herzustellen
  • Versuche 50.19.189.95 ... Zeitüberschreitung
  • Versuch 35.168.202.10 ... Zeitüberschreitung
  • Versuch 54.173.225.186... Zeitüberschreitung
  • Versuche 107.22.7.7 ... Zeitüberschreitung
  • Versuche 52.204.229.116... verbunden
  • Verbunden mit api.twilio.com (52.204.229.116) Port 443 (#0)
  • NSS mit Certpath initialisieren: sql:/etc/pki/nssdb
  • CA-Datei: /etc/pki/tls/certs/ca-bundle.crt CA-Pfad: keiner
  • SSL: Der Zertifikatsbetreffname „*.glympse.com“ stimmt nicht mit dem Zielhostnamen „api.twilio.com“ überein.
  • NSS-Fehler -12276
  • Verbindung #0 curl wird geschlossen: (51) SSL: Der Betreff des Zertifikats „*.glympse.com“ stimmt nicht mit dem Zielhostnamen „api.twilio.com“ überein.

Basierend auf Turdies Vorschlag habe ich am 4. November auch Folgendes ausprobiert:

openssl s_client -connect api.twilio.com

ERGEBNIS:

kein Port definiert

(Danach hat es eine Menge verfügbarer Argumente ausgespuckt, etwa Dokumentation. Ich bin nicht sicher, ob Sie das wollten.)

Ich bin Entwickler, aber ein Neuling in Sachen Linux und Zertifikate, also hoffe ich, dass mir jemand helfen kann. Vielen Dank im Voraus.

Antwort1

Meiner Untersuchung zufolge handelt es sich hierbei um ein Problem mit curl.

Sie benötigen curl -v --tlsv1.2

Dies scheint ein ähnliches Problem zu sein wie das des TS

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

Es scheint, als ob Sie in Ihrem Curl ein Zertifikat mit dem glympse.com NSS mit dem Zertifikatspfad sql:/etc/pki/nssdb senden. Das führt zu einer Nichtübereinstimmung, da twilio.com und glympse unterschiedliche Namen haben. Ich denke, Sie müssen bei twilio.com prüfen, welches Zertifikat Sie für die Verbindung mit der API verwenden müssen. Es sieht auch so aus, als ob Sie nssdb und eine SQL-Datenbank verwenden, davon weiß ich nichts.

Die letzte Zeile im Curl weist eindeutig auf die Zertifikatsfehlanpassung hin. Closing connection #0 curl: (51) SSL: certificate subject name '*.glympse.com' does not match target host name 'api.twilio.com'

Bearbeiten

Wo ist Ihr API-Schlüssel darin? Überprüfen Sie die Dokumente

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****

verwandte Informationen