Repository navigation
criptografia externa
Home > Criptografando dados (P2P) em clientes externos
No RAL foi implementado a técnica de transferência de dados entre o Cliente (TRALClient) e o Servidor (TRALServer) de forma criptografada.
Podemos definir os seguintes tipos de criptografia: AES128, AES192 e AES256, todas no formato CBC (padrão) com padding PKCS7
Como até o momento não foi encontrada uma RFC que padronizasse o uso de criptografia para trafegar dados sob o protocolo HTTP, a mesma foi implementada utilizando cabeçalhos para que o Cliente e Servidor pudessem “conversar”.
Foi encontrada em pesquisas a RFC 8188, o qual trata apenas de criptografia no AES128_GCM, mas lembramos que existe a possibilidade de ter um conteúdo comprimido (ex: GZip ou Deflate) seguido de criptografia. Para solucionar isso foi criado os seguintes cabeçalhos: Content-Encription e Accept-Encription.
O cabeçalho Content-Encription define qual é a criptografia que foi utilizada para criptografar os dados, podendo ser: aes128cbc_pkcs7, aes192cbc_pkcs7 ou aes256cbc_pkcs7. Já o cabeçalho Accept-Encription define quais os tipos de criptografia aceita pelo cliente ou servidor, podendo ser: aes128cbc_pkcs7, aes192cbc_pkcs7 e aes256cbc_pkcs7.
Exemplos:
-
Transferindo dados apenas criptografados
POST /teste/dados HTTP/1.1 Host: localhost:8000 Authorization: Bearer "token" Connection: keep-alive Content-Encription: aes128cbc_pkcs7 Acception-Encription: aes128cbc_pkcs7, aes192cbc_pkcs7, aes256cbc_pkcs7 Content-Type: application/json Content-Length: 239 <conteúdo criptogrado com aes128>Resposta
HTTP/1.1 200 OK Date: Thu, 19 Oct 2023 21:27:21 GMT Content-Type: application/json; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Content-Encription: aes256cbc_pkcs7 Content-Length: 540 <conteúdo criptogrado com aes256>Note que no exemplo acima o cliente enviou os dados em aes128 e recebeu como resposta dados criptografados em aes256, o motivo disso esta no cabeçalho Accept-Encription
-
Transferindo dados criptografados e comprimidos
Nesse tipo de transferência devemos optar por comprimir primeiro os dados e depois criptografa-los, pois normalmente o algoritmo de criptografia é mais lento que o algoritmo de compressão
POST /teste/dados HTTP/1.1 Host: localhost:8000 Authorization: Bearer "token" Connection: keep-alive Content-Encoding: gzip Accept-Encoding: gzip, deflate Content-Encription: aes128cbc_pkcs7 Accept-Encription: aes128cbc_pkcs7, aes192cbc_pkcs7, aes256cbc_pkcs7 Content-Type: application/json Content-Length: 239 *<conteúdo comprimido e depois criptogrado com aes128>*Resposta
HTTP/1.1 200 OK Date: Thu, 19 Oct 2023 21:27:21 GMT Content-Type: application/json; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Content-Encoding: gzip Content-Encription: aes256cbc_pkcs7 Content-Length: 540 <conteúdo *comprimido e depois* criptogrado com aes256>Note que no exemplo acima o cliente enviou os dados em aes128 e recebeu como resposta dados criptografados em aes256, o motivo disso esta no cabeçalho Accept-Encription
Foi criado nos clientes RAL a propriedade CriptoOptions, com as seguintes propriedades:
- CriptType: com as opções: crNone, crAES128, crAES192, crAES256
- Key: chave ou password
Uma vez definida a chave na propriedade do Cliente com a mesma chave definida no servidor ambos passam automaticamente a trocar mensagens criptografadas
Começar
Servidor
- Rotas e parâmetros
- Rotas avançadas: tipos, grupos, versões 🚧
- Ler o pedido e responder
- Objetos no corpo 🚧
- Resposta em fluxo 🚧
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- Swagger e Postman
- Servidor SOAP 🚧
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
- Testes em memória 🚧
MQTT 🚧
- O que é e quando usar 🚧
- Cliente MQTT 🚧
- Broker MQTT 🚧
- MQTT-SN 🚧
- Ponte REST 🚧
- Segurança 🚧
- Rede ruim 🚧
Cliente
Motores
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar