Category: Java

Validação de certificados digitais para hosts confiáveis (bypass)

By paulovittor23, 28 de Fevereiro de 2010 4:29 PM

O erro abaixo ocorre quando tentamos chamar uma url HTTPS cujo Web Server não possui um certificado digital assinado por uma Autoridade Certificadora.

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1611)
…  (omitindo linhas do trace)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:285)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:191)
…  (omitindo linhas do trace)
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
…  (omitindo linhas do trace)

Quando isto ocorre, existem duas abordagens possíveis para que o cliente do Web Server possa realizar a chamada HTTPS sem receber o erro acima apresentado. Continue reading 'Validação de certificados digitais para hosts confiáveis (bypass)'»

Configurando duas instâncias no JBoss para rodar na mesma máquina

By paulovittor23, 13 de Novembro de 2009 10:08 PM

Configurando duas instâncias no JBoss para rodar na mesma máquina

Quem já precisou rodar mais de uma instância no Jboss certamente já teve problemas como:

java.rmi.server.ExportException: Port already in use: 8080; nested exception is:
java.net.BindException: Address already in use: JVM_Bind

Este problema é muito comum para as portas padrões do JBoss, como por exemplo: 1098,1099,8009,8080,8083 e 4444.

Para resolver este problema, existe uma receita de bolo fácil de seguir!

1. Na instalação do JBoss, duplique a configuração all fazendo uma cópia do diretório. A cópia terá o nome all2.

2. Dentro do diretório $JBOSS_HOME/docs/examples/binding-manager do JBoss existe um arquivo chamado sample-bindings.xml. Este arquivo pode ser carregado na inicialização do JBoss para definir quais são as portas utilizadas pelo container. Vamos ver como fazer isto.

3. Para carregar o arquivo sample-bindings.xml, você deve habilitar o MBean que está dentro do arquivo jboss-service.xml de cada um das instancias (independente de ser minimal, default, all ou alguma customizada).

Continue reading 'Configurando duas instâncias no JBoss para rodar na mesma máquina'»

Shiva – Um framework para mapeamento objeto-diretório

By paulovittor23, 25 de Setembro de 2009 2:20 AM

Shiva – Um framework para mapeamento objeto-diretório

O projeto

O objetivo do projeto foi desenvolver um framework Open Source em Java capaz de mapear classes POJO para diretórios LDAP, provendo desta forma funcionalidades de persistência e validação dos objetos destas classes. Algo semelhante ao Hibernate (dadas as devidas proporções), porém, tendo como backend um serviço de diretórios (OpenLdap, Active Directory).

As principais features

• Mapeamento objeto-diretório: assim como o mapeamento objeto relacional temos um mapeamento relacionando as classes a diretórios e atributos da classe Java com atributos do diretório;

Continue reading 'Shiva – Um framework para mapeamento objeto-diretório'»

Process.waitFor(), corrigindo o deadlock no Windows

By paulovittor23, 6 de Fevereiro de 2008 1:09 AM

Process.waitFor(), corrigindo o deadlock no Windows

Há um tempo atrás eu estava desenvolvendo uma mini biblioteca para trabalhar a execução de comandos no SO de uma forma mais amigável, uma espécie de DSL. Criada a biblioteca realizei alguns testes em ambiente Linux. Tudo funcionamento dentro do planejado, hora de utilizá-la…

Bom, na primeira real utilização da biblioteca, em ambiente Win32 executei um “ipconfig /all”, e para minha surpresa, após todos os testes que havia realizado o comando simplesmente não respondeu.

Voltei ao Linux, mudei o comando para “ifconfig” e o comando executou sem problemas…

Comecei a debugar a biblioteca afim de descobrir o que estava causando o congelamento na execução do comando no SO… Após alguns minutos, cheguei finalmente ao método “waitFor()” da classe “Process”… pela definição esse método faz com que a thread corrente espere, caso necessário, até o processo representado pelo objeto Process terminar.

A questão é que o método “Runtime.exec()” (que devolve a instância do processo criado) cria um pipe para a saída padrão e quando um processo filho escreve uma quantidade grande de dados neste pipe, de modo a deixar o buffer cheio, o pipe é bloqueado pelo Windows até que o processo pai leia esse buffer. Logo, caso o processo pai nunca leia a saída padrão do processo filho teremos um deadlock.

Continue reading 'Process.waitFor(), corrigindo o deadlock no Windows'»

Pegando o Mac Address antes e depois do Mustang (Java 6)

By paulovittor23, 1 de Fevereiro de 2008 9:35 PM

Pegando o Mac Address antes e depois do Mustang (Java 6)

Recentemente tive a necessidade de automatizar o preenchimento de um arquivo de configurações. Nesse arquivo, um dos valores que eram preenchidos era o Mac Address.
Logo me veio na cabeça a necessidade de executar o “ipconfig /all” (win) / “ifconfig” (linux) / “?” (mac)… capturar a saída, tratar o retorno, etc. Sem falar nas dificuldades de se fazer um parser independente do SO, do idioma do SO, ou seja, muitas variáveis que ao qualquer descuido fariam o parser falhar. =/
Bom, uma das novidades do Mustang é que a classe “java.net.NetworkInterface” traz um novo método para pegar o Mac Address de forma transparente. O método se chama “getHardwareAddress”. A seguir vou mostrar um exemplo de como pegar o Mac Address antes e depois do Java 6. Acredito que vá ficar claro a simplicidade e confiabilidade do novo método.

Continue reading 'Pegando o Mac Address antes e depois do Mustang (Java 6)'»

Panorama Theme by Themocracy