Bluehost – certificado errado apresentado pelo host para chamada de API para Twilio

Bluehost – certificado errado apresentado pelo host para chamada de API para Twilio

Bluehost VPSexecutando CentOS, mas cat /etc/redhat-releaserevela CloudLinux release 6.10 (Final).

A execução de comandos curl nas APIs do Twilio em meu PC local (Win11/IIS/PHP) funciona bem. Quando tento fazer a mesma coisa em meu servidor Bluehost (com saída detalhada habilitada), ele falha com esta mensagem:

o nome da entidade do certificado '*.us-east-1.es.amazonaws.com' não corresponde ao nome do 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'

O suporte da Twilio me orientou a baixar o certificado SSL por meio do Chrome, o que eu fiz. Chamei o certificado de "cacert.pem", pensando que é assim que ele precisa ser nomeado, mas não tenho ideia. E aqui estão as etapas que eles me fizeram executar no meu terminal bash:

  1. Carregue o arquivo cacert.pem: Primeiro, carregue o arquivo cacert.pem em seu CentOS VPS. Você pode usar métodos seguros de transferência de arquivos como SCP ou SFTP para isso.

  2. Determine o local do armazenamento de certificados: O local do armazenamento de certificados pode variar dependendo dos aplicativos com os quais você deseja usá-lo. Para obter confiança em todo o sistema, normalmente você pode colocar o certificado em /etc/pki/tls/certs/.

  3. Copie o arquivo de certificado: copie o arquivo cacert.pem para o armazenamento de certificados: sudo cp cacert.pem /etc/pki/tls/certs/

  4. Atualizar o pacote de certificados CA: Para atualizar o pacote de certificados CA, execute o seguinte comando: sudo update-ca-trust enable

  5. Atualize a confiança da CA: atualize a confiança da CA usando o comando update-ca-trust extract: sudo update-ca-trust extract

  6. Verifique a instalação do certificado: Você pode verificar se o certificado foi instalado com sucesso verificando o pacote CA: cat /etc/pki/tls/certs/ca-bundle.crt O cacert.pemconteúdo deve ser incluído neste pacote.

  7. Reinicie o Apache.


Nada disso fez diferença e o certificado errado ainda é apresentado.

Perguntei a eles "como o sistema operacional sabe qual certificado usar?" Mas eles não responderam. Parece que isso nunca foi especificado.

Executei um comando curl (observe que uso -kpara inseguro apenas para ver o que aconteceria) na API Twilio e recebi o seguinte erro:

O cabeçalho de autorização requer o parâmetro 'Credencial'. O cabeçalho de autorização requer o parâmetro 'Assinatura'. O cabeçalho de autorização requer o parâmetro 'SignedHeaders'. O cabeçalho de autorização requer a existência de um cabeçalho 'X-Amz-Date' ou 'Date'. Autorização=QUNmN Básico***

Executei os 2 digdiagnósticos a seguir no servidor Bluehost:

dig api.twilio.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.8 <<>> api.twilio.com ;; opções globais: +cmd ;; Obtive resposta: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58818 ;; bandeiras: qr rd ra; CONSULTA: 1, RESPOSTA: 9, AUTORIDADE: 0, ADICIONAL: 0

;; SEÇÃO DE PERGUNTAS: ;api.twilio.com. EM UM

;; SEÇÃO DE RESPOSTA: 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 EM A 34.204.146.75 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 EM A 52.20.98.48 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 EM A 35.153.214.247 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 EM A 54.208.14.118 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 EM A 54.242.5.138 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com. 20 EM UM 34.232.251.189

;; Tempo de consulta: 10 ms ;; SERVIDOR: 1.1.1.1#53(1.1.1.1) ;; QUANDO: Sexta-feira, 3 de novembro 08:51:38 2023 ;; Tamanho do MSG obtido: 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 ;; opções globais: +cmd ;; Obtive resposta: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58143 ;; bandeiras: qr rd ra; CONSULTA: 1, RESPOSTA: 9, AUTORIDADE: 0, ADICIONAL: 0

;; SEÇÃO DE PERGUNTAS: ;api.twilio.com. EM UM

;; SEÇÃO DE RESPOSTA: 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 EM A 3.222.47.158 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 EM A 34.236.63.82 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 EM A 52.0.177.50 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 EM A 34.232.27.126 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 EM A 3.225.164.19 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com. 21 EM A 52.206.184.52

;; Tempo de consulta: 23 ms ;; SERVIDOR: 8.8.8.8#53(8.8.8.8) ;; QUANDO: Sexta-feira, 3 de novembro 08:52:11 2023 ;; Tamanho do MSG obtido: 261

Tentei o seguinte em 4 de novembro com base na sugestão 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:

  • Prestes a conectar() à porta 443 de api.twilio.com (#0)
  • Tentando 50.19.189.95... Tempo limite
  • Tentando 35.168.202.10... Tempo limite
  • Tentando 54.173.225.186... Tempo limite
  • Tentando 107.22.7.7... Tempo limite
  • Tentando 52.204.229.116... conectado
  • Conectado a api.twilio.com (52.204.229.116) porta 443 (#0)
  • Inicializando NSS com certpath: sql:/etc/pki/nssdb
  • CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: nenhum
  • SSL: o nome da entidade do certificado '*.glympse.com' não corresponde ao nome do host de destino 'api.twilio.com'
  • Erro NSS -12276
  • Fechando conexão #0 curl: (51) SSL: o nome da entidade do certificado '*.glympse.com' não corresponde ao nome do host de destino 'api.twilio.com'

Também tentei o seguinte em 4 de novembro com base na sugestão de Turdie:

openssl s_client -connect api.twilio.com

RESULTADO:

nenhuma porta definida

(Depois disso, ele gerou uma tonelada de argumentos disponíveis, como documentação. Não tenho certeza se você queria isso.)

Sou desenvolvedor, mas novato em Linux e certificados, então espero que alguém possa me ajudar. Desde já, obrigado.

Responder1

Com base na minha pesquisa, esse é um problema do curl.

Você precisa usar curl -v --tlsv1.2

Este parece ser um problema semelhante ao que o TS está enfrentando

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

Parece que no seu curl você está enviando um certificado com o NSS glympse.com com certpath: sql:/etc/pki/nssdb. Isso causa uma incompatibilidade porque twilio.com e glympse são nomes diferentes. Acho que você precisa verificar com twilio.com qual certificado você precisa usar para se conectar à API. Também parece que você está usando nssdb e um banco de dados sql, não tenho nenhum conhecimento disso.

A última linha do curl indica claramente a incompatibilidade do certificado Closing connection #0 curl: (51) SSL: certificate subject name '*.glympse.com' does not match target host name 'api.twilio.com'

Editar

Onde está sua chave de API nisso? Verifique os 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****

informação relacionada