Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Como fazer requisições HTTP com conexão HTTPS/TLS usando o utilitário openssl?

Olá,

Após migrar a estrutura do backend de HTTP para HTTPS, o simples telnet não funciona mais. De fato, precisamos criar a comunicação com o servidor (backend) respeitando as regras da conexão TLS.

Portanto, para isso, encontrei no utilitário openssl. Para criar a conexão com o servidor, fiz:

$ openssl s_client -ignore_unexpected_eof -connect localhost:8000

(estou usando o parâmetro "-ignore_unexpected_eof" pois estava recebendo o erro "XXXXX:error:0A000126:SSL routines:ssl3_read_n:unexpected eof while reading:../ssl/record/rec_layer_s3.c:308:")

openssl

Após tentar fazer uma requisição GET como feita anteriormente com o telnet, a conexão é encerrada e recebo o HTTP status code "400 Bad Request".

Alguém saberia se estou esquecendo de algum parâmetro ou requisito para requisições com o openssl funcionar?

1 resposta
solução!

Descobri que o problema ocorria por conta dos caracteres que indicam o final da linha.

Por padrão, a opção s_client entrega o prompt em Line Feed (LF). Mas, para casos em que vamos realizar requisições GET, por exemplo, precisamos usar a opção -crlf para traduzir o LF em Carriage Return + Line Feed (CRLF) .

  • LF: caractere que indica ida para a próxima linha (ou seja, vá para a próxima linha)
  • CR: caractere que indica a ida para o começo da linha atual (ou seja, move o cursor para o começo da linha)
  • CRLF: junção dos dois anteriores, que indica "volte para o começo desta linha E vá para a próxima linha"

Por exemplo, o Windows utiliza o CRLF por padrão no Bloco de notas. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Portanto, para resolver, usamos:

$ openssl s_client -crlf -connect localhost:8000

openssl with -crlf parameter

s_client: The s_client command implements a generic SSL/TLS client which connects to a remote host using SSL/TLS. It is a very useful diagnostic tool for SSL servers.

-crlf: this option translated a line feed from the terminal into CR+LF as required by some servers.

Referências: https://cursos.alura.com.br/forum/topico-erro-warning-crlf-will-be-replaced-by-lf-in-241738 https://pt.stackoverflow.com/questions/44373/aviso-git-lf-will-be-replaced-by-crlf https://pt.stackoverflow.com/questions/93444/qual-a-diferen%C3%A7a-entre-carriage-return-e-line-feed https://www.openssl.org/docs/man1.0.2/man1/s_client.html https://en.wikipedia.org/wiki/Newline

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software