quarta-feira, 1 de outubro de 2008

Passo para criar um certificado digital através da JDK (Keystore, keytool) e configurar o Tomcat para usar esse certificado

Bom essa postagem é bem simples e rápida. 

Alguns amigos me pediram um auxílio para criar um certificado digital para ser usado em um webservice.

Segue um pequeno passo-a-passo que encontrei a um bom tempo (em algum lugar da internet) que foi de muita ajuda.

PRIMEIRO PASSO (Comandos para criação do Keystore):

Keytool –genkey –alias –keyalg rsa –keystore  

 

SEGUNDO PASSO (Comandos para criação do csr):

Keytool –certreq –keyalg rsa –keysize 1024 –alias –file tissnet.csr –keystore

 

TERCEIRO PASSO: Editar o arquivo .csr e copiar o conteúdo para enviar para a Certsign através do formulário no site.

 

QUARTO PASSO: Após receber o certificado da Certsign, salvar o conteúdo em um arquivo com a extensão .cer, importar através do comando:

keytool -import -alias -keystore
-trustcacerts -file  

 

QUINTO PASSO: Configurar o arquivo server.xml, adicionando:

" keystorepass="" debug="0" scheme="https" secure="true" br="">
Connector port="8443" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" 
acceptCount="100" keystoreFile="" keystorePass="" debug="0" scheme="https" secure="true" 
$clientAuth="false" sslProtocol="TLS"

Vale lembrar que esse certificado não terá muita validade para uma transação de verdade, pois o mesmo não estará contido em nenhuma entidade autentificadora, que irá validar esses dados, como a Verisign ou Certisign.

Espero poder ajudar, qualquer coisa é só postar uma dúvida.

Obrigado a todos, 

Rafael Martins



domingo, 6 de julho de 2008

Problemas para criar cliente java de um webservice gerado no delphi

Neste post irei relatar aqui problemas que ocorreram quando tentava criar um cliente em Java de um webservice gerado no Delphi.

Por algumas vezes já precisei trabalhar com Webservices, como servidor e como cliente. Sempre usando tecnologias do JAVA, algumas vezs .NET.

Recentemente, precisei criar um cliente para um serviço desenvolvido em Delphi executado a partir de uma dll.
Para minha surpresa tive problemas na implementação, para uma surpresa ainda maior encontrei muitos programadores na internet com este mesmo problema que será aqui relatado.
Essa dificuldade e o pouco material encontrado sobre o assunto serviram de motivação para publicá-lo aqui.

Problema:
Comecei salvando o wsdl do serviço, como sempre faço, e através do Eclipse (IDE de desenvolvimento Java) com alguns plugins, WSDL2Java, da API do APACHE AXIS 1.3 tentei gerar o cliente e não obtive êxito.
O erro apresentado era sempre esse:
IWAB0399E Error in generating Java from WSDL: WSDLException (at /definitions/binding/operation/input): faultCode=INVALID_WSDL: Element '{http://schemas.xmlsoap.org/wsdl/}input' contained unexpected attributes: 'message':

Procurei outras formas de gerar os clientes. Tentei da forma mais básica também com AXIS 1.3, mas agora sem uso de plugins.

Segue abaixo uma parte do código:

  1. try {
  2. String wsURL = "http://server-call/webcliente/WebAgenda.dll/wsdl/IWebagenda?wsdl";
  3. Object[] params = { id, nome, nasc, sexo, doc, tel, cel, conv, mat, temp};
  4. Service service = new Service();
  5. Call call = (Call) service.createCall();
  6. call.setTargetEndpointAddress(wsURL);
  7. call.setOperationName("ReceberCliente");
  8. String ret = (String) call.invoke(params);
  9. System.out.println("Resultado: " +ret);
  10. } catch (Exception e) {
  11. // TODO Auto-generated catch block
  12. System.out.println(e.getMessage());
  13. e.printStackTrace();
  14. }
Quando tentava invocar o método do serviço passando os parametros necessários caia nessa exception:

  1. nested exception is:
  2. org.xml.sax.SAXException: Bad envelope tag: definitions
  3. AxisFault
  4. faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
Busquei então outras API's do Java como XFIRE da Codehaus e JAX-WS da própria Sun e excessões equivalentes ocorriam. Foi então que resolvi analisar melhor o WSDL do serviço gerado em Delphi.

Percebi então que a estrutura deste webservice era totalmente diferente de um gerado em Java ou .Net.
Pesquisando na internet encontrei informações dizendo que a plataforma Delphi gerava as interfaces de um webservice que não era compatível com o WS-I (padrão suportado pelo Java e .NET), ou seja, o serviço delphi não era interoperável com a plataforma Java e .NET.
WS-I é o perfil básico de interoperabilidade.

O próximo passo era tentar fazer o Delphi gerar seu serviço no padrão WS-I, porém, até a publicação deste post a empresa responsável em prover esse serviço não havia conseguido efetuar tal tarefa.

Solução:
Foi necessário solicitar que desenvolvessem novamente o webservice, que agora foi feito em .NET. A partir daqui a geração dos clientes se deu normalmente sem maiores complicações.



Pelo que conheço de SOA e Webservices este tipo de implementação provem comunicação entre qualquer linguagem, pois sua principal caracterísca é ser baseado em XML.
Um serviço web provê interoperabilidade entre máquinas em uma rede, neste caso a internet. E, um erro como esse fura o conceito dessa tecnologia. Caso esteja errado sintam-se a vontade para postar comentários e me corrigir.

Obrigado a todos,

Rafael Martins

sábado, 18 de agosto de 2007

Links importantes


Executar uma procedure em Java com o CallableStatemant
http://www.guj.com.br/posts/list/65177.java#345219
SOA - Service-oriented architecture
http://www.guj.com.br/posts/list/15/65073.java#342679

TISSNet, WebServices e Ponto-a-Ponto
http://www.guj.com.br/posts/list/15/59950.java#338054

Introdução JAX-WS 2.0 com JAVA 6 (Web Services)
PARTE 1
http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2/

PARTE 2
http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2_pt2/


Gerando um .war
http://www.guj.com.br/posts/list/63184.java#333267

Iniciando no SOAP com AXIS APACHE
http://www.javafree.org/content/view.jf?idContent=106

Certificado Digital e JAVA
http://www.guj.com.br/posts/list/58762.java#309561




Locais onde meu site é acessado.