
VPS BlueHostejecutando CentOS, pero cat /etc/redhat-release
revela CloudLinux release 6.10 (Final)
.
La ejecución de comandos curl contra las API de Twilio en mi PC local (Win11/IIS/PHP) funciona bien. Cuando intento hacer lo mismo en mi servidor Bluehost (con la salida detallada habilitada), falla y aparece este mensaje:
El nombre del sujeto del certificado '*.us-east-1.es.amazonaws.com' no coincide con el nombre del host de destino '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'
El soporte de Twilio me indicó que descargara su certificado SSL a través de Chrome, lo cual hice. Llamé al certificado "cacert.pem", pensando que ese es el nombre que debía tener, pero no tengo idea. Y estos son los pasos que me hicieron realizar en mi terminal bash:
Cargue el archivo cacert.pem: Primero, cargue el archivo cacert.pem en su CentOS VPS. Puede utilizar métodos seguros de transferencia de archivos como SCP o SFTP para esto.
Determine la ubicación del almacén de certificados: la ubicación del almacén de certificados puede variar según las aplicaciones con las que desee utilizarlo. Para lograr confianza en todo el sistema, normalmente puede colocar el certificado en /etc/pki/tls/certs/.
Copie el archivo de certificado: copie el archivo cacert.pem al almacén de certificados:
sudo cp cacert.pem /etc/pki/tls/certs/
Actualice el paquete de certificados de CA: para actualizar el paquete de certificados de CA, ejecute el siguiente comando:
sudo update-ca-trust enable
Actualice la confianza de CA: actualice la confianza de CA mediante el comando de extracción update-ca-trust:
sudo update-ca-trust extract
Verifique la instalación del certificado: puede verificar que el certificado se haya instalado correctamente verificando el paquete de CA:
cat /etc/pki/tls/certs/ca-bundle.crt
elcacert.pem
contenido debe estar incluido en este paquete.Reinicie Apache.
Nada de eso hizo la diferencia y todavía se presenta el certificado incorrecto.
Les pregunté "¿cómo sabe el sistema operativo qué certificado usar?" Pero no respondieron. Parece que eso nunca se especificó.
Ejecuté un comando curl (tenga en cuenta que lo uso -k
para inseguro solo para ver qué sucedería) contra la API de Twilio y obtuve el siguiente error:
El encabezado de autorización requiere el parámetro 'Credencial'. El encabezado de autorización requiere el parámetro "Firma". El encabezado de autorización requiere el parámetro 'SignedHeaders'. El encabezado de autorización requiere la existencia de un encabezado 'X-Amz-Date' o 'Date'. Autorización=Básico QUNmN***
Ejecuté los 2 dig
diagnósticos siguientes en el servidor Bluehost:
dig api.twilio.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.8 <<>> api.twilio.com ;; opciones globales: +cmd ;; Obtuve respuesta: ;; ->>ENCABEZADO<<- código de operación: CONSULTA, estado: NOERROR, id: 58818 ;; banderas: qr rd ra; CONSULTA: 1, RESPUESTA: 9, AUTORIDAD: 0, ADICIONAL: 0
;; SECCIÓN DE PREGUNTAS: ;api.twilio.com. EN UN
;; SECCIÓN DE RESPUESTAS: api.twilio.com. 20 EN CNAME
virginia.us1.api-lb.twilio.com. virginia.us1.api-lb.twilio.com. 20 EN CNAME self-healing.api-alb.us1.api-lb.twilio.com. self-healing.api-alb.us1.api-lb.twilio.com. 20 EN CNAME ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 EN A 34.204.146.75 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 EN A 52.20.98.48 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 EN A 35.153.214.247 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 EN A 54.208.14.118 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 EN A 54.242.5.138 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 EN UN 34.232.251.189;; Tiempo de consulta: 10 ms ;; SERVIDOR: 1.1.1.1#53(1.1.1.1) ;; CUÁNDO: viernes 3 de noviembre 08:51:38 2023 ;; TAMAÑO DE MENSAJE RECVD: 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 ;; opciones globales: +cmd ;; Obtuve respuesta: ;; ->>ENCABEZADO<<- código de operación: CONSULTA, estado: NOERROR, id: 58143 ;; banderas: qr rd ra; CONSULTA: 1, RESPUESTA: 9, AUTORIDAD: 0, ADICIONAL: 0
;; SECCIÓN DE PREGUNTAS: ;api.twilio.com. EN UN
;; SECCIÓN DE RESPUESTAS: api.twilio.com. 21 EN CNAME
virginia.us1.api-lb.twilio.com. virginia.us1.api-lb.twilio.com. 21 EN CNAME self-healing.api-alb.us1.api-lb.twilio.com. self-healing.api-alb.us1.api-lb.twilio.com. 21 EN CNAME ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 EN A 3.222.47.158 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 EN A 34.236.63.82 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 EN A 52.0.177.50 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 EN A 34.232.27.126 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 EN A 3.225.164.19 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 EN UN 52.206.184.52;; Tiempo de consulta: 23 ms ;; SERVIDOR: 8.8.8.8#53(8.8.8.8) ;; CUÁNDO: viernes 3 de noviembre 08:52:11 2023 ;; TAMAÑO DEL MENSAJE RECVD: 261
Probé lo siguiente el 4 de noviembre según la sugerencia de Turdie:
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
RESULTADO:
- A punto de conectarse() al puerto 443 (#0) de api.twilio.com
- Probando 50.19.189.95... Tiempo de espera
- Probando 35.168.202.10... Tiempo de espera
- Intentando 54.173.225.186... Tiempo de espera
- Probando 107.22.7.7... Tiempo de espera
- Intentando 52.204.229.116... conectado
- Conectado a api.twilio.com (52.204.229.116) puerto 443 (#0)
- Inicializando NSS con certpath: sql:/etc/pki/nssdb
- Archivo CA: /etc/pki/tls/certs/ca-bundle.crt CApath: ninguno
- SSL: el nombre del sujeto del certificado '*.glympse.com' no coincide con el nombre del host de destino 'api.twilio.com'
- Error de NSS -12276
- Cerrando conexión #0 curl: (51) SSL: el nombre del sujeto del certificado '*.glympse.com' no coincide con el nombre del host de destino 'api.twilio.com'
También probé lo siguiente el 4 de noviembre según la sugerencia de Turdie:
openssl s_client -connect api.twilio.com
RESULTADO:
ningún puerto definido
(Después de eso, escupió un montón de argumentos disponibles, como documentación. No estoy seguro si querías eso).
Soy desarrollador, pero novato en Linux y certificados, así que espero que alguien pueda ayudarme. Gracias de antemano.
Respuesta1
Según mi investigación, este es un problema con el rizo.
Necesitas usar
curl -v --tlsv1.2
Esto parece un problema similar al que está experimentando el TS.
https://blog.michaelfmcnamara.com/2015/12/curl-and-ssl-tls-issues/
Parece que en su curl está enviando un certificado con el NSS de glympse.com con certpath: sql:/etc/pki/nssdb. Eso provoca una discrepancia porque twilio.com y glympse tienen nombres diferentes. Creo que debes consultar con twilio.com qué certificado necesitas usar para conectarte a la API. También parece que estás usando nssdb y una base de datos SQL, no tengo ningún conocimiento de eso.
La última línea del rizo indica claramente que el certificado no coincide.
Closing connection #0 curl: (51) SSL: certificate subject name '*.glympse.com' does not match target host name 'api.twilio.com'
Editar
¿Dónde está tu clave API en esto? Consulte los documentos
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****