[Eppnicbr] Acesso TLS
Carlos Eduardo Fontes Silva
carlos.eduardo at cges.com.br
Thu Apr 17 18:25:47 BRT 2008
Felipe,
Só para formalizar (já mandei o projeto que contém algumas funcionalidades de leitura e gravação no SslStream ), segue abaixo as funções que resolvem o problema:
public static int INT_SZ = 4;
public static byte[] ReadMessageEpp(SslStream sslStream)
{
int len = readBufferSize(sslStream);
len -= INT_SZ;
return ReadMessage(sslStream, len);
}
public static byte[] ReadMessage(SslStream sslStream, int inbuf_sz)
{
byte[] in_buf = new byte[inbuf_sz];
int len = 0;
int bytesRead = 0;
while (bytesRead < inbuf_sz)
{
try
{
len = sslStream.Read(in_buf, bytesRead, inbuf_sz - bytesRead);
}
catch (IOException xcp)
{
return null;
}
if (len < 0)
{
return null;
}
bytesRead += len;
}
return in_buf;
}
private static int readBufferSize(SslStream sslStream)
{
byte[] in_buf = new byte[INT_SZ];
int len = 0;
int bytesRead = 0;
while (bytesRead < INT_SZ)
{
try
{
len = sslStream.Read(in_buf, bytesRead, INT_SZ - bytesRead);
}
catch (IOException xcp)
{
return -1;
}
if (len < 0)
{
return -1;
}
bytesRead += len;
}
return (((in_buf[0] & 0xff) << 24) | ((in_buf[1] & 0xff) << 16) |
((in_buf[2] & 0xff) << 8) | (in_buf[3] & 0xff));
}
public static void WriteMessageEpp(SslStream sslStream, byte[] message)
{
writeBufferSize(sslStream, message.Length + INT_SZ);
sslStream.Write(message, 0, message.Length);
sslStream.Flush();
}
private static void writeBufferSize(SslStream sslStream, int buf_sz)
{
byte[] out_buf = new byte[INT_SZ];
out_buf[0] = (byte)(0xff & (buf_sz >> 24));
out_buf[1] = (byte)(0xff & (buf_sz >> 16));
out_buf[2] = (byte)(0xff & (buf_sz >> 8));
out_buf[3] = (byte)(0xff & buf_sz);
sslStream.Write(out_buf, 0, INT_SZ);
}
Para ler uma mensagem enviada pela Registro.br, deve-se usar a função " ReadMessageEpp", passando o objeto da conexão.
Para enviar uma mensagem para a Registro.br, deve-se usar a função " WriteMessageEpp", passando o objeto de conexão e o array de bytes da mensagem. Para converter uma string em array de bytes, use o comando System.Text.Encoding.UTF8.GetBytes(string) (a mensagem deve ser enviado no formato UTF-8).
[]s
Carlos Eduardo
-----Original Message-----
From: eppnicbr-bounces at eng.registro.br [mailto:eppnicbr-bounces at eng.registro.br] On Behalf Of Felipe Rodrigues Pereira
Sent: quarta-feira, 16 de abril de 2008 09:43
To: 'EPP no .br - protocolo e operacao'
Subject: [Eppnicbr] Acesso TLS
Ola Rodrigo, obrigado pela ajuda!
Consegui fazer a conexão com o servidor usando o .net, agora minha
dificuldade esta sendo mandar o XML para fazer o login, se vc mandar o
código para mim dar uma olhada ficaria muito grato! Ou me adiciona no MSN
lipe_hc1 at hotmail.com ou no gmail felipe.rordrigues at gmail.com. Obrigado desde
já!
-----Mensagem original-----
De: eppnicbr-bounces at eng.registro.br
[mailto:eppnicbr-bounces at eng.registro.br] Em nome de Rodrigo Salvador
Enviada em: terça-feira, 8 de abril de 2008 14:23
Para: EPP no .br - protocolo e operacao
Assunto: Re: [Eppnicbr] RES: RES: RES: RES: RES: RES: Acesso TLS
Caro Felipe,
eu também precisei implementar o EPP na plataforma Windows.
Isso foi extremamente trabalhoso, pois a documentação de tal protocolo
exige dedicação, muita atenção e muitos testes.
Começe lendo ftp://ftp.registro.br/rfc/rfc4934.txt , nesse documento
você encontrará as definições de transporte dos pacotes XML em TCP/IP.
Feito isso, você pode criar uma classe base com as definições em
ftp://ftp.registro.br/rfc/rfc4930.txt, e extendê-las para contato
[ftp://ftp.registro.br/rfc/rfc4933.txt] e para domínio
[ftp://ftp.registro.br/rfc/rfc4931.txt], vc perceberá que não muda muita
coisa além da estrutura básica.
Após concluir as extensões básica para manipulação de contatos e
domínios, parta para as definições específicas do registro.br,
extendendo a classe do contato para brorg
[ftp://ftp.registro.br/pub/libepp-nicbr/draft-neves-epp-brorg-03.txt] e
o dominio para brdomain
[ftp://ftp.registro.br/pub/libepp-nicbr/draft-neves-epp-brdomain-03.txt].
Eu escrevi todo o programa em Win32, utilizando o Borland Delphi2006.
Ele tem uma extensão para trabalhar com .NET, mas nunca a utilizei, não
posso te confirmar as dificuldades para tornar isso funcional.
Montei até mesmo um sheep em win32, para o procedimento de homologação!
O Delphi permite facilmente usar soquetes TCP/IP e manipuladores para o
TLS1, que ajudaram bastante, mas as definições de XML para requisições e
respostas tiveram que ser feitas 'na-mão'. Não conheço a flexibilidade
do .NET para esse procedimento, porém no que eu puder ajudar, fique a
vontade em questionar.
Uma outra alternativa, seria compilar esse meu código para usar como uma
.dll nativa win32, e reaproveitá-la no .NET, mas creio que dessa maneira
teria muita coisa a ser reescrita, e perderias o dinâmismo da OOP.
abcs,
Rodrigo Salvador
Felipe Rodrigues Pereira escreveu:
>
> Olá, estou tentando implementar na plataforma .net, alguém pode me
> passar algumas dicas para a comunicação, etou tentando fazer através e
> socket, se alguem conhece outro jeito de conectar e se tiver a boa
> vontade de me avisar ficarei grato!
>
>
>
> Atenciosamente,
>
> *Felipe Rodrigues Pereira
> *Sistemas
>
>
>
> Tecla Serviços de Internet
>
>
*---------------------------------------------------------------------------
----------*
>
> Tel.: (11) 3524-4339
> www.tecla.com.br <http://www.tecla.com.br>
>
>
>
> Serviços de Internet
>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> eppnicbr mailing list
> eppnicbr at eng.registro.br
> https://eng.registro.br/mailman/listinfo/eppnicbr
>
_______________________________________________
eppnicbr mailing list
eppnicbr at eng.registro.br
https://eng.registro.br/mailman/listinfo/eppnicbr
_______________________________________________
eppnicbr mailing list
eppnicbr at eng.registro.br
https://eng.registro.br/mailman/listinfo/eppnicbr
More information about the eppnicbr
mailing list