[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