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.

questionAnswers(3)

yourAnswerToTheQuestion