
Bluehost VPSexecutando CentOS, mas cat /etc/redhat-release
revela 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:
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.
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/.
Copie o arquivo de certificado: copie o arquivo cacert.pem para o armazenamento de certificados:
sudo cp cacert.pem /etc/pki/tls/certs/
Atualizar o pacote de certificados CA: Para atualizar o pacote de certificados CA, execute o seguinte comando:
sudo update-ca-trust enable
Atualize a confiança da CA: atualize a confiança da CA usando o comando update-ca-trust extract:
sudo update-ca-trust extract
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
Ocacert.pem
conteúdo deve ser incluído neste pacote.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 -k
para 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 dig
diagnó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****