0% acharam este documento útil (0 voto)
40 visualizações12 páginas

Configuração e Vantagens do tSFTPClient

Enviado por

hrodns
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
40 visualizações12 páginas

Configuração e Vantagens do tSFTPClient

Enviado por

hrodns
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd

tSFTPClient

O SFTP, ou Secure File Transfer Protocol, é um protocolo seguro para


transferência de arquivos diversos, confidenciais ou não, entre
computadores, servidores e dispositivos de armazenamento em
nuvem, que faz uso do protocolo SSH (Secure Shell) para criptografar
todos os dados transferidos. Isso torna o SFTP uma opção muito mais
segura do que outros protocolos de transferência de arquivos como
FTP ou HTTP.
É possível utilizar a Classe tSFTPClient, disponível na linguagem TLPP,
para implementar funcionalidades equivalentes a Classe tFTPClient,
disponível na linguagem em ADVPL, de forma mais segura e eficiente.
Certificados de Login
Para gerar certificados de Login, é importante atentar-se a estes
procedimentos:
Geração de Certificados de Login para Classe tSFTPClient
Configuração
No arquivo de configurção INI do Application Server ([Link]),
segue um exemplo de como configurar algumas chaves utilizadas
especificamente pela Classe TSFTPClient:
[SFTP]
privatekey = D:\Keys\SFTPDEV_PREFERED\withpass\id_rsa
publickey = D:\Keys\SFTPDEV_PREFERED\withpass\id_rsa.pub
certpassword = m1nh4S3nH4fl3!SXHL3SSD
ShellExec =1
As descrições de cada chaves da sessão SFTP:
 PRIVATEKEY é utilizada para configurar o caminho do arquivo
referente a chave privada localizado no servidor.
 PUBLICKEY é utilizada para configurar o caminho do arquivo
referente a chave pública localizado no servidor.
 CERTPASSWORD é a senha da chave pública. Se não existir,
basta omiti-la.
 SHELLEXEC Permite habilitar o recurso de envio de comandos
diretamente para o prompt de comandos do servidor SFTP
remoto. Valores aceitos: 0-Inativo (Padrão) / 1-Ativo.
Autenticação
O SFTP suporta dois métodos de autenticação:
Autenticação via senha: A autenticação via senha é o método mais
comum de autenticação SFTP. Requer que o usuário forneça um nome
de usuário e uma senha para acessar o servidor SFTP.
Autenticação via chave pública: A autenticação via chave pública é
uma maneira mais segura de autenticar em um servidor SFTP que
requer a criação de uma chave pública e uma chave privada. A chave
pública é enviada ao servidor SFTP e a chave privada é mantida pelo
usuário.
A autenticação via chave pública é mais segura do que a
autenticação via senha pois não requer o envio de senha para o
servidor SFTP, tornando mais difícil para um invasor roubar a senha.
Vantagens do SFTP
Segurança: Usa criptografia para proteger todos os dados
transferidos.
Confiabilidade: Protocolo confiável que fornece transferências seguras
e consistentes de arquivos.
Flexibilidade: Pode ser usado para transferir arquivos entre diferentes
sistemas operacionais e dispositivos.
Desvantagens do SFTP
Velocidade: Pode ser um pouco mais lento do que outros protocolos
de transferência de arquivos como o FTP.
Complexidade: Pode ser um pouco mais complexo de configurar e
usar do que outros protocolos de transferência de arquivos. Requer o
uso do servidor OpenSSH para prover o acesso SFTP através da
camada SSH.
Métodos da Classe SFTP
 Geração de Certificados de Login para Classe
tSFTPClient
 tSFTPClient:Connect
 tSFTPClient:ConnectPubKey
 tSFTPClient:ConnectPubKeyEx
 tSFTPClient:Directory
 tSFTPClient:Disconnect
 tSFTPClient:GetLastResponse
 tSFTPClient:GetMLCount
 tSFTPClient:GetMLLine
 tSFTPClient:MakeDir
 tSFTPClient:MakeFile
 tSFTPClient:Move
 tSFTPClient:New
 tSFTPClient:NoOp
 tSFTPClient:ReceiveFile
 tSFTPClient:RemoveDirectory
 tSFTPClient:RemoveFile
 tSFTPClient:SendFile
 tSFTPClient:ShellExec

Geração de Certificados de Login para Classe tSFTPClient

Pré-Requisitos: Putty, OpenSSH, OpenSSL e Windows Subsystem for


Linux (WSL)
Observação Importante: Não se deve utilizar a ferramenta
PUTTYGEN para geração dos certificados de LOGIN.
Recomenda-se utilizar apenas a ferramenta ssh-keygen apenas para este
processo de geração e a openssl para eventual conversão de formatos de
chaves, caso for necessário.
Atualmente, existem vários tipos de certificados de Login que podem ser
utilizados no SFTP. São elas:
 RSA Key (Padrão)
 DSA Key, ECDSA Key (Elliptic Curve)
 Ed25519 Key (EdDSA Curve).
Na plataforma, recomenda-se utilizar o padrão RSA Key.
Para gerarmos um par de chaves publica e privada compatível com o
subsistema de SFTP do Protheus, devemos realizar os seguintes
procedimentos:
ssh-keygen -t rsa -m PEM -f id_rsa
Este comando, gerará um par de certificados público e privado
normalmente chamada de (id_rsa.pub e id_rsa) respectivamente. Em
ambiente Linux/WSL, favor verificar se os formatos de chaves, com o auxílio
do comando file id_rsa*, estão conforme a tabela abaixo:
Arquivo Tipo da chave
Gerado

id_rsa PEM RSA private key

id_rsa.pub OpenSSH RSA public


key

Feito este procedimento, todo o conteúdo do arquivo id_rsa.pub deverá ser


acrescentado dentro do arquivo ~/.ssh/authorized_keys no usuário do
servidor SFTP em que terá acesso.
No arquivo [Link], devemos configurar, conforme o exemplo
abaixo, a seção SFTP para que as funções de download e upload funcionem
corretamente:
[SFTP]
privatekey = D:/Keys/id_rsa
publickey = D:/Keys/id_rsa.pub
certpassword = teste12345
Note que o certificado, neste exemplo, foi gerado com uma senha
"teste12345". Caso o certificado tenha sido gerado sem nenhuma senha,
devemos omitir a chave certpassword nesta seção SFTP.
Observações importantes
Nota: A ferramenta ssh-keygen suporta os seguintes modos de
geração do certificados:
 "RFC4716" (RFC 4716/SSH2 pública ou chave privada)
 "PKCS8" (PKCS8 pública ou chave privada)
 "PEM" (PEM chave pública)
IMPORTANTE: Caso for observado que o certificado de login gerado
não esteja no formato PEM, é necessário converter o certificado (no
arquivo id_rsa) Os formatos: "RFC4716" (RFC 4716/SSH2 pública ou
chave privada) e "PKCS8" (PKCS8 pública ou chave privada)
suportados pela a ferramenta ssh-keygen, não estao homologados
com subsistema de SFTP do Application Server podendo ocorrer
erros ao realizar o Login caso forem utilizados.
Para converter, para o formato compatível, é necessário realizar o seguinte
procedimento na linha de comando (Requer OpenSSL):
openssl rsa -in id_rsa -outform pem > id_rsa.pem
Caso necessitar gerar um certificado no formato Putty, para algum outro fim
sem ser para uso no Protheus, é possível converter o certificado para o
formato PPK utilizando o seguinte comando:
puttygen id_rsa -o [Link] -O private
Lembrando novamente que este certificado no formato Putty (PPK) não é
suportado pelo o Protheus não devendo ser utilizado.
Feito estes procedimentos, é interessante conferir novamente se o formato
dos certificados estão de acordo com o reportado ao executar o comando no
WSL ou Linux (considerando que os arquivos de certificados estão na
mesma pasta):
file *
Ao executar o comando o resultado deverá ser:

Arquivo Tipo da chave


Gerado

id_rsa PEM RSA private key

id_rsa.pem PEM RSA private key

id_rsa.pub OpenSSH RSA public key

minhachave.p PuTTY Private Key File, version 3,


pk algorithm ssh-rsa

Nota: O formato da chave privada (id_rsa) nunca deverá ser


OpenSSH RSA private key uma vez que este não é suportado.
IMPORTANTE: Nunca se deve utilizar certificados no formato PUTTY
(PPK) para a plataforma Protheus pois não são compatíveis.

tSFTPClient:ConnectPubKey
Estabelece uma conexão com um servidor de SFTP ( SSH File Transfer
Protocol ) utilizado o modo de autenticação por usuário com a chave publica
e senha da chave publica.
Pré-requisito
Para que a conexão com o servidor SFTP seja bem sucedida, é preciso
configurar as chaves pública e privada e a respectiva senha da chave
pública na seção [SFTP] do arquivo de configuração do AppServer. Exemplo
de como configurar:
[SFTP]
privatekey = D:\Keys\SFTPDEV_PREFERED\withpass\id_rsa
publickey = D:\Keys\SFTPDEV_PREFERED\withpass\id_rsa.pub
certpassword = m1nh4S3nH4fl3!SXHL3SSD
ShellExec =1
Sintaxe
TSFTPClient():ConnectPubKey( < cServer >, < cPort >, < cUser > )
Parâmetros
Os parâmetros que esta função recebe são descritos abaixo:

Nome Tipo Descrição Obrigató Referên


rio cia

cServer caracte Endereço do X


re servidor SFTP a ser
conectado

cPort caracte Número da porta do X


re servidor

cUser caracte Login do usuário X


re

cUserPasswo caracte Senha do usuário X


rd re

Retorno
Conforme a Tabela abaixo esta função retonará o valor numérico. Além
disso, o [Link] conterão informações importantes adicionais caso for
detectados erros.

Retor Tipo Descrição


no

nRet numéric Status de conexão ao servidor


o SFTP

Exemplo
user Function sftp_open_close_connection_ex2()

local nRet1, nRet2


local oSftp1 := tSFTPClient():new()

nRet1 :=
oSftp1:ConnectPubKey("[Link]","2222","josevitor")
if (nRet1 <> 0)
conOut("Falha em conectar ao servidor SFTP")
return .F.
endif

nRet2 := oSftp1:Disconnect()
if (nRet2 <> 0)
conOut("Falha em desconectar ao servidor SFTP")
return .F.
endif

Return .T.
Observações
Note que neste método de conexão, temos dois tipos de senhas que são a
do usuário e a da chave pública.
Segue a lista de códigos de status de retorno indicando sucesso ou falha de
conexão:

Códig Símbolo Descrição


o

0 SFTP_OK Sucesso de conexão ao


servidor SFTP

-1 SFTP_HOST_NOT_FOUND Servidor remoto não


encontrado

-2 SFTP_SOCKET_FAIL Falha no socket da


conexão

-3 SFTP_CONNECTION_FAIL Falha ao conectar no


servidor remoto

-4 SFTP_SESSION_INIT_FAIL Falha ao inicializar o


socket

-5 SFTP_HANDSHAKE_FAIL Falha no HandShake da


camada SSH
Códig Símbolo Descrição
o

-6 SFTP_SFTP_INIT_FAIL Falha ao inicializar o


subsistema de SFTP

-28 SFTP_KNOWNHOSTS_READ_FAIL Falha ao realizar leitura


do host

-30 SFTP_KNOWNHOSTS_FINGERPRINT_ Falha ao realizar leitura


FAIL da assinatura

-31 SFTP_KNOWNHOSTS_MISMATCH Assinatura não-conforme


no arquivo de
KNOWNHOSTS

-32 SFTP_KNOWNHOSTS_NOTFOUND Assinatura não-


encontrada no arquivo de
KNOWNHOSTS

-33 SFTP_KNOWNHOSTS_CHECK_FAILU Falha ao verificar o


RE arquivo de
KNOWNHOSTS

tSFTPClient:ConnectPubKeyEx

Estabelece uma conexão com um servidor de SFTP ( SSH File Transfer


Protocol ) utilizando o modo de autenticação por login e senha de
usuário e ainda com um chave pública e senha desta chave
registradas no INI do Application Server.
Este método se difere do ConnectPubKey pois realiza a autenticação
em duas etapas (Usuário + Senha) e (Chaves Pública e Privada +
Senha da Chave). É um caso especial onde o servidor SFTP encontra-
se configurado para realizar autenticação múltipla por mais de um
fator de autenticação.
Pré-requisito
Para que a conexão com o servidor SFTP seja bem sucedida é preciso
configurar as chaves pública e privada e a respectiva senha da chave
pública na seção [SFTP] do arquivo de configuração do Application
Server. Exemplo de como configurar:
[SFTP]
privatekey = D:\Keys\SFTPDEV_PREFERED\withpass\id_rsa
publickey = D:\Keys\SFTPDEV_PREFERED\withpass\id_rsa.pub
certpassword = m1nh4S3nH4fl3!SXHL3SSD
ShellExec =1
Sintaxe
TSFTPClient():ConnectPubKeyEx( < cServer >, < cPort >, < cUser >,
< cUserPassword > )
Parâmetros
Os parâmetros que esta função recebe são descritos abaixo:

Nome Tipo Descrição Obrigató Referên


rio cia

cServer caracte Endereço do X


re servidor SFTP
a ser
conectado

cPort caracte Número da X


re porta do
servidor SFTP

cUser caracte Login do X


re usuário

cUserPasswo caracte Senha do X


rd re usuário

Retorno
Conforme a tabela abaixo, esta função retonará um valor numérico.
Além disso, no arquivo [Link] serão registradas informações
adicionais importantes caso forem detectados erros.
Retor Tipo Descrição
no

nRet numéric Status de conexão ao servidor


o SFTP.

Exemplo
user function sftp_open_close_connection_ex1()

local nRet1, nRet2


Local oSftp1 := tSFTPClient():new()

nRet1 :=
oSftp1:ConnectPubKeyEx("[Link]","2222","josevitor",
"Fs74!@bz*@54/")
if (nRet1 <> 0)
conOut("Falha em conectar ao servidor SFTP")
return .F.
endif

nRet2 := oSftp1:Disconnect()
if (nRet2 <> 0)
conOut("Falha em desconectar ao servidor SFTP")
return .F.
endif

Return .T.
Observações
Note que neste método de conexão, temos dois tipos de senhas que
são a do usuário e a da chave pública, no entanto a senha da chave
pública é configurada no arquivo de configuração do Application
Server.
Segue a lista de códigos de status de retorno indicando sucesso ou
falha de conexão:
Códig Símbolo Descrição
o

0 SFTP_OK Sucesso de
conexão ao
servidor SFTP

-1 SFTP_HOST_NOT_FOUND Servidor remoto


não encontrado

-2 SFTP_SOCKET_FAIL Falha no socket da


conexão

-3 SFTP_CONNECTION_FAIL Falha ao conectar


no servidor remoto

-4 SFTP_SESSION_INIT_FAIL Falha ao inicializar


o socket

-5 SFTP_HANDSHAKE_FAIL Falha no
HandShake da
camada SSH

-6 SFTP_SFTP_INIT_FAIL Falha ao inicializar


o subsistema de
SFTP

-28 SFTP_KNOWNHOSTS_READ_FAIL Falha ao realizar


leitura do host

-30 SFTP_KNOWNHOSTS_FINGERPRINT_ Falha ao realizar


FAIL leitura da
assinatura

-31 SFTP_KNOWNHOSTS_MISMATCH Assinatura não-


conforme no
arquivo de
KNOWNHOSTS

-32 SFTP_KNOWNHOSTS_NOTFOUND Assinatura não-


encontrada no
arquivo de
Códig Símbolo Descrição
o

KNOWNHOSTS

-33 SFTP_KNOWNHOSTS_CHECK_FAILU Falha ao verificar o


RE arquivo de
KNOWNHOSTS

Você também pode gostar