Páginas

quarta-feira, 21 de março de 2012

Criptografia SSL/TSL no Apache2


Introdução
 A criptografia elimina algumas falhas de segurança como MITM (Man In The Middle) e problemas na integridade.

Configurando o Apache2
 Após a instalação do servidor Apache2, execute o comando:

 sudo a2enmod ssl 

 É necessário um certificado para a criptografica do canal. Se necessário, pode-se utilizar do OpenSSL para gerar um certificado uma KeyStore como segue:

 openssl req -new -x509 -nodes -out server.crt -keyout server.key 

 O ideal é utilizar-se de um certificado provido por uma autoridade certificadora, eliminando assim o risco de Phishing para as entidades utilizadoras do serviço provido via SSL/TLS.

 Após adquirido o certificado, é necessário configura uma nova instância do Apache2. Para fins de organização, as configurações ficam dentro da pasta sites-available, dentro da pasta onde o apache está instalado. A instalação já fornece uma configuração padrão chamada default-ssl. Efetue uma cópia desse arquivo para um novo arquivo que será a nova instância, no nosso caso sample-ssl:

 sudo cp default-ssl sample-ssl 


 Após copiada a configuração do servidor para instância que será utilizada, é necessário configurar com os certificados gerados anteriormente. Para tanto, abra em modo edição o arquivo sample-ssl encontre as linhas a serguir e defina com o endereço dos certificados:
 SSLCertificateFile /etc/apache2/ssl/server.crt 
 SSLCertificateKeyFile /etc/apache2/ssl/server.key 

 Agora basta incluir sample-ssl como um site selecionado e recarregar o Apache. Para tanto efetue os seguintes comandos:

 sudo a2ensite sample-ssl 
 sudo /etc/init.d/apache2 reload 


 Agora se efetuar uma chamada para https://localhost aparecerá a página default do Apache (Its Works). 

 Se o certificado não for autenticado por uma autoridade verificadora, então vai aparecer uma mensagem perguntado se você deseja continuar. Selecione a opção para prosseguir.
 Então o acesso será feito, mas ainda pode manter um ícone mencionando que o certificado não é válido.

 Para que esta mensagem não seja mais exibida, adquira um certificado autenticado por uma autoridade verificadora. Se for uma comunicação entre serviços, é interessante criar um mecanismo para autenticação mútua, assim as  interação entre as aplicações irá acontecer de forma segura.

segunda-feira, 19 de março de 2012

Um pouco sobre Vaadin

Introdução
Bom, Vaadin é uma extensão do GWT, com uma diferença interessante. O processamento e geração do Javascripts são feitos no lado server. Se quiser conferir, https://vaadin.com/, possui vários exemplos.

Vou mostrar um exemplo simples, que é basicamente como vem na aplicação blank do plugin para o Eclipse.


Criando a aplicação
Depois de instalar o plugin para Eclipse (confira aqui https://vaadin.com/eclipse), vá em File>New...>Vaadin Project.

Dê o nome do projeto como (no meu caso foi sample_blog), e depois forneça uma estrutura de pacote e o nome da aplicação que você está criando (coloquei package=com.example.sampleblog e Application=SampleBlogApplication).

Ok, agora é só finalizar e a aplicação inicial está criada. Assim, você pode dar uma olhada na classe SampleBlogApplication que vai ter a seguinte estrutura:

Código fonte 1
package com.example.sampleblog;


import com.vaadin.Application;
import com.vaadin.ui.*;


public class SampleBlogApplication extends Application {
@Override
public void init() {
Window mainWindow = new Window("Sample_blog Application");
Label label = new Label("Hello Vaadin user");
mainWindow.addComponent(label);
setMainWindow(mainWindow);
}


}

Entendendo o código fonte 1
Basicamente o Vaadin funciona pela classe Application. O método init que foi sobrescrito efetua a inicialização da aplicação, e a criação dos componentes da aplicação. A classe Window representa um janela ou uma sub janela, dependendo de onde for adicionada na aplicação. No nosso caso, estará representando uma janela. E a classe Label, por incrível que pareça, é um componente de rótulo.

Window, é um Container, e por isso podemos adicionar componentes a ele. Em mainWindow.addComponent(label) adicionamos o Label que foi criado ao container Window. Após isso devemos adicionar a Window a nossa aplicação, senão ela não vai aparacer XD

Mapeamento do Servlet
Após criar a aplicação, precisamos mapear o Servlet do Vaadin no web.xml:

<servlet>
<servlet-name>Sample_blog Application</servlet-name>
<servlet-class>com.vaadin.terminal.gwt.server.ApplicationServlet</servlet-class>
<init-param>
<description>
Vaadin application class to start</description>
<param-name>application</param-name>
<param-value>com.example.sampleblog.SampleBlogApplication</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>Sample_blog Application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

Deploy
Após fazer esta alteração no web.xml, basta exportar a aplicação como um arquivo WAR. Efetue o deploy da aplicação em algum container Web.


Depois acesse http://localhost:8080/app/ e vai aparecer o texto Hello Vaadin user. É interessante fazer uns testes com os componentes que o Vaadin proporciona, sem dúvida é possível fazer aplicações ricas para internet.

Abraços. Tchau!

quinta-feira, 15 de março de 2012

Implementando em Java Web Services Fácil Parte - 2

Bom, já mostramos como fazer um Web Service bem simples utilizando o framework XFire. Neste post vou mostrar como criar um Web Service simples com a API java no container WEB. Basicamente ele vai agir como um Servlet, mas sem estender nenhuma classe ou interface.


@WebService
public class WSSample{

@WebMethod()
public String sampleServiceMapped( @WebParam(name = "parameter") String parameter) {
System.out.println("Meu parâmetro: "+parameter);
                return "Resposta "+parameter;
        }

}

Vamos analisar cada item agora:

@WebService - indica que a classe será publicada como um Web Service;
@WebMethod - indica que será um método exposto pelo Web Service;
@WebParam - indica que um parâmetro com o nome de parameter será recebido e incluido no argumento parameter. Isto ajuda quando o nome do parâmetro e o nome argumento se diferenciam ou mesmo por questões de organização.

Agora basta publicar no web.xml como um Servlet:


<servlet>
<servlet-name>WSSample</servlet-name>
<servlet-class>br.com.sample.ws.WSSample</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WSSample</servlet-name>
<url-pattern>/wssample/WSSample</url-pattern>
</servlet-mapping>


Agora basta acessar o http://localhost:8080/app/wssample/WSSample?wsdl e está ai o descritor do serviço. Se gerar um cliente a partir disso irá aparecer "Meu Parâmetro <parametro>".

Boas implementações.