O Protocolo SFTP: Uma Comparação com o FTP Tradicional
O SFTP (SSH File Transfer Protocol) é um protocolo de rede que fornece transferência de arquivos e manipulação de dados sobre um canal seguro. Ele foi projetado como uma extensão do SSH (Secure Shell), oferecendo segurança e funcionalidade aprimoradas em comparação com o FTP (File Transfer Protocol) tradicional.
Comparação entre SFTP e FTP
Vantagens do SFTP
- Segurança: O SFTP utiliza criptografia SSH para proteger a transferência de dados, o que garante que as informações enviadas e recebidas não possam ser interceptadas ou modificadas por terceiros. O FTP, por outro lado, transmite dados em texto claro, tornando-os vulneráveis a ataques de interceptação.
- Autenticação: O SFTP oferece métodos de autenticação mais seguros, incluindo a autenticação com chaves públicas e privadas, além do uso de senhas. O FTP tradicional geralmente depende apenas de autenticação por senha, o que é menos seguro.
- Integridade dos Dados: SFTP inclui verificações de integridade dos dados, garantindo que os arquivos não sejam corrompidos durante a transferência. O FTP não possui essas verificações nativas, podendo resultar em dados corrompidos sem que o usuário seja avisado.
- Firewall-Friendly: O SFTP opera sobre uma única porta (normalmente a porta 22), tornando-o mais amigável para atravessar firewalls e evitando problemas de configuração de rede. O FTP requer múltiplas portas, o que pode complicar a configuração de firewalls.
Desvantagens do SFTP
- Complexidade de Configuração: Configurar um servidor SFTP pode ser mais complexo, especialmente ao implementar autenticação por chave pública e privada ou configurar servidores SSH.
- Desempenho: Devido à criptografia, o SFTP pode ser mais lento do que o FTP em ambientes de alta carga de transferência de dados. No entanto, essa diferença de desempenho geralmente é compensada pela segurança adicional oferecida.
Exemplos de Uso
- Transferência Segura de Arquivos Corporativos: Empresas utilizam o SFTP para transferir documentos confidenciais, como relatórios financeiros e informações pessoais de funcionários, garantindo a segurança dos dados durante o trânsito.
- Hospedagem Web: Muitos serviços de hospedagem oferecem acesso SFTP para upload de arquivos de sites, permitindo que desenvolvedores transfiram arquivos com segurança.
- Backups Remotos: SFTP é utilizado para realizar backups remotos seguros, onde dados críticos são transferidos para servidores externos ou em nuvem.
Uso de Certificados SSL para Login no SFTP
Embora o SFTP seja baseado em SSH e não diretamente em SSL/TLS, o conceito de autenticação com certificados pode ser utilizado. No contexto do SFTP, isso se refere à autenticação por chave pública e privada, onde:
- Geração de Chaves: O usuário gera um par de chaves (pública e privada) em seu sistema.
- Distribuição da Chave Pública: A chave pública é enviada ao servidor e adicionada ao arquivo
~/.ssh/authorized_keys
do usuário. - Autenticação: Ao conectar-se ao servidor SFTP, a chave privada é utilizada para autenticar a sessão, sem necessidade de senhas.
Esse método de autenticação é altamente seguro e elimina o risco de senhas fracas ou roubadas.
Exemplo de Código em TLPP para Conexão SFTP
A seguir, um exemplo para conectar-se a um servidor SFTP e listar arquivos no diretório remoto:
Exemplo de seção no Appserver.ini
[SFTP]
privatekey = D:\Keys\SFTPDEV_NEWER\withpass\id_rsa
publickey = D:\Keys\SFTPDEV_NEWER\withpass\id_rsa.pub
certpassword = segredo123
#include "totvs.ch"
// Valid Server Definitions
#define TSFTPUSER_NAME "sftpuser"
#define TTESTUSER_NAME "testuser"
#define TALIEN_USER "user"
#define SFTPUSER_PASSWORD "p@ssw0rdn0tencrypted"
#define TESTUSER_PASSWORD "meup@ssw0rdl0g1n"
#define REMOTE_SFTP_SERVER "servidor.totvs.com"
#define REMOTE_SFTP_SERVER_PORT "2222"
User Function sftp_class_manual_test01()
local ret1, ret2, nI
sftp1 = tSFTPClient():new()
//Método mais seguro com pares de chaves via certificado.
sftp1:cPrivateKeyFilePath := 'D:\\Keys\\SFTPDEV_NEWER\\withpass\\id_rsa'
sftp1:cPublicKeyFilePath := 'D:\\Keys\\SFTPDEV_NEWER\\withpass\\id_rsa.pub'
sftp1:cKeyFilePassword := 'segredo123'
ret1 = sftp1:ConnectPubKey(REMOTE_SFTP_SERVER,REMOTE_SFTP_SERVER_PORT,TALIEN_USER)
if (ret1 <> 0)
Conout("###### FAILED TO SFTP Connect with Certificate")
endif
aListFiles := sftp1:Directory("/home/alien")
if (Len(aListFiles) == 0)
conOut("###### Falha em listar os diretórios do servidor remoto")
return .F.
endif
nRet2 := sftp1:ReceiveFile("downloadedTLPP_OK.txt","./somefile.txt")
if (nRret2 <> 0)
ConOut("###### Falha em transferir um arquivo do servidor SFTP.")
return .F.
endif
conOut("### Lista de arquivos:")
For nI := 1 to len(aListFiles)
//Listar nome do arquivo encontrado (posição 1 do subarray)
conOut(aListFiles[nI][1])
Next
ret2 := sftp1:Disconnect()
if (ret2 <> 0)
Conout("###### FAILED TO SFTP Connect with Certificate")
endif
Return
Conclusão
O SFTP representa uma evolução significativa em relação ao FTP tradicional, oferecendo segurança robusta, integridade de dados e maior compatibilidade com firewalls. Embora a configuração possa ser mais complexa, os benefícios em segurança e confiabilidade tornam o SFTP uma escolha superior para muitas aplicações, desde a transferência de arquivos corporativos até backups remotos seguros. Utilizar autenticação baseada em chaves públicas e privadas cria uma camada adicional de segurança, eliminando os riscos associados às senhas.
Documentação
https://tdn.totvs.com/display/tec/tSFTPClient
Abraços Hugo Guilherme Gomes.