Certificado Arquillian Embutido Glassfish expirado
Em 14 de agosto, o certificado gtecybertrust5ca usado pelo Glassfish expirou, causando erros nos meus testes Arquillian.
Este problema é semelhante a este:O certificado expirou ”no log iniciando o Glassfish 3.1.2 exceto, eu estou usando oembutido versão do Glassfish via Maven, Arquillian e SureFire para executar testes de unidade e integração.
Tentei instruir o Maven a usar um keystore local, o que acompanha o JRE, em um esforço para impedir que o certificado expirado fosse usado. Eu verifiquei que o certificado expirado não está contido neste keystore:
C:\Java\jdk1.7.0_25\jre\lib\security>keytool -list -keystore cacerts
Instruo o SureFire via Maven a iniciar a JVM com argumentos para usar o keystore confiável do cacerts:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<argLine>
-Djavax.net.ssl.trustStore=C:\Java\jdk1.7.0_25\jre\lib\security\cacerts
-Djavax.net.ssl.trustStorePassword=changeit
</argLine>
....
</configuration>
</plugin>
<!-- Configure the Embedded GlassFish Maven plugin -->
<plugin>
<groupId>org.glassfish.embedded</groupId>
<artifactId>maven-embedded-glassfish-plugin</artifactId>
<version>4.0</version>
<configuration>
<app>${project.build.directory}/${project.build.finalName}.war</app>
<port>7070</port>
<containerType>web</containerType>
</configuration>
</plugin>
Também adicionei argumentos da JVM onde o Maven é iniciado no arquivo mvn.bat do Maven:
@REM Use specified java cert trust
set MAVEN_OPTS=%MAVEN_OPTS%
-Djavax.net.ssl.trustStore=%JAVA_HOME%\jre\lib\security\cacerts
-Djavax.net.ssl.trustStorePassword=changeit
%MAVEN_JAVA_EXE% %MAVEN_OPTS% ...
Aqui está a chamada Surefire da JVM usada para executar os testes de unidade:
Forking command line: cmd.exe /X /C "C:\Java\jdk1.7.0_25\jre\bin\java
-Djavax.net.ssl.trustStore=C:\Java\jdk1.7.0_25\jre\lib\security\cacerts
-Djavax.net.ssl.trustStorePassword=changeit ..."
Running com.networkfleet.ssp.activation.SelectedActivationTableBeanTest
Os argumentos da linha de comando parecem corresponder às propriedades esperadas do sistema que a Glassfish espera de acordo com as classes com.sun.enterprise.security.ssl.impl.SecuritySupportImpl e com.sun.enterprise.server.pluggable.SecuritySupport:
@Contract
public abstract class SecuritySupport {
public static final String KEYSTORE_PASS_PROP = "javax.net.ssl.keyStorePassword";
public static final String TRUSTSTORE_PASS_PROP = "javax.net.ssl.trustStorePassword";
public static final String KEYSTORE_TYPE_PROP = "javax.net.ssl.keyStoreType";
public static final String TRUSTSTORE_TYPE_PROP = "javax.net.ssl.trustStoreType";
public static final String keyStoreProp = "javax.net.ssl.keyStore";
public static final String trustStoreProp = "javax.net.ssl.trustStore";
No entanto, eles não parecem ser apanhados pelo Glassfish, porque o certificado expirado ainda está sendo encontrado em qualquer keystore confiável ao qual é padrão.
Eu realmente aprecio alguma ajuda. Obrigado.