10178 - Envio de E-mails -
Problema: São gerados alarmes nos REPs, porém, o envio do e-mail não está ocorrendo. No log da CSM Center ocorre a mensagem abaixo:
[#|2013-08-14T14:10:06.434-0300|WARNING|sun-appserver2.1|com.senior.seguranca.csmcenter.calmsv.mainsv|_ThreadID=17;_ThreadName=p: thread-pool-1; w: 4;_RequestID=26a4d114-bfcd-4409-a200-a233d1b0f8bd;|Problemas no envio de e-mail: COLETOR DE MARCAÇÕES para email1@empresa.com.br;email2@empresa.com.br;
...
java.lang.RuntimeException: org.apache.commons.mail.EmailException: Sending the email to the following server failed : mail.servidor.com.br:25
...
Caused by: org.apache.commons.mail.EmailException: Sending the email to the following server failed : mail.nomedoservidor.com.br:25
...
Caused by: javax.mail.MessagingException: Can't send command to SMTP host;
nested exception is:
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
...
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Quando ocorre / onde se aplica: Em ambientes que utilizam a CSM Center e precisam que sejam enviados e-mails para controles internos.
Solução: A situação ocorre porque o arquivo que contém os certificados confiáveis (cacerts.jks) fica em um diretório padrão do Java (%JAVA_HOME%/jre/lib/security/cacerts). Porém é possível configurar a JVM para apontar para um outro caminho, e é isso que o Glassfish faz. Ele configura a JVM para apontar para %DOMINIO_CSMCENTER%/config/cacerts. O procedimento para a solução é:
1. Abrir prompt de comando
2. Navegar até a pasta JDK* da CSM Center, e entrar em jre/bin; (exemplo: C:/Senior/CSMCenter/jdk/jre/bin)
3. Executar keytool -import -alias serverCert -file RootCert.crt -keystore <LOCAL de instalação do glassfish>/glassfish/domains/csmcenter/config/cacerts no prompt de comando. O caminho da CSM Center deve ser apontado conforme o ambiente do cliente, e substituir RootCert.crt pelo caminho completo (com o nome) do certificado do cliente.
4. Quando ele pedir pela senha, informar: changeit
5. Quando ele perguntar Trust this certificate?, responder: yes
6. Reiniciar o serviço da CSM Center.
* Para saber qual o JDK utilizado pelo serviço CSM Center, acesse o arquivo <Disco local>/glassfish3/glassfish/config/asenv.bat. O diretório estará informado no campo 'set AS_JAVA'.
[#|2013-08-14T14:10:06.434-0300|WARNING|sun-appserver2.1|com.senior.seguranca.csmcenter.calmsv.mainsv|_ThreadID=17;_ThreadName=p: thread-pool-1; w: 4;_RequestID=26a4d114-bfcd-4409-a200-a233d1b0f8bd;|Problemas no envio de e-mail: COLETOR DE MARCAÇÕES para email1@empresa.com.br;email2@empresa.com.br;
...
java.lang.RuntimeException: org.apache.commons.mail.EmailException: Sending the email to the following server failed : mail.servidor.com.br:25
...
Caused by: org.apache.commons.mail.EmailException: Sending the email to the following server failed : mail.nomedoservidor.com.br:25
...
Caused by: javax.mail.MessagingException: Can't send command to SMTP host;
nested exception is:
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
...
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Quando ocorre / onde se aplica: Em ambientes que utilizam a CSM Center e precisam que sejam enviados e-mails para controles internos.
Solução: A situação ocorre porque o arquivo que contém os certificados confiáveis (cacerts.jks) fica em um diretório padrão do Java (%JAVA_HOME%/jre/lib/security/cacerts). Porém é possível configurar a JVM para apontar para um outro caminho, e é isso que o Glassfish faz. Ele configura a JVM para apontar para %DOMINIO_CSMCENTER%/config/cacerts. O procedimento para a solução é:
1. Abrir prompt de comando
2. Navegar até a pasta JDK* da CSM Center, e entrar em jre/bin; (exemplo: C:/Senior/CSMCenter/jdk/jre/bin)
3. Executar keytool -import -alias serverCert -file RootCert.crt -keystore <LOCAL de instalação do glassfish>/glassfish/domains/csmcenter/config/cacerts no prompt de comando. O caminho da CSM Center deve ser apontado conforme o ambiente do cliente, e substituir RootCert.crt pelo caminho completo (com o nome) do certificado do cliente.
4. Quando ele pedir pela senha, informar: changeit
5. Quando ele perguntar Trust this certificate?, responder: yes
6. Reiniciar o serviço da CSM Center.
* Para saber qual o JDK utilizado pelo serviço CSM Center, acesse o arquivo <Disco local>/glassfish3/glassfish/config/asenv.bat. O diretório estará informado no campo 'set AS_JAVA'.