Le 14 août, le certificat gtecybertrust5ca utilisé par Glassfish a expiré, provoquant des erreurs dans mes tests Arquillian.
Ce problème est similaire à celui-ci : Le certificat a expiré" dans le journal en démarrant Glassfish 3.1.2 sauf que j'utilise le Embarqué de Glassfish via Maven, Arquillian et SureFire pour exécuter des tests unitaires et d'intégration.
J'ai essayé de demander à Maven d'utiliser un keystore local, celui qui est fourni avec le JRE, afin d'empêcher l'utilisation du certificat expiré. J'ai vérifié que le certificat expiré n'est pas contenu dans ce keystore :
C:\Java\jdk1.7.0_25\jre\lib\security>keytool -list -keystore cacerts
Je demande à SureFire via Maven de démarrer la JVM avec des arguments pour utiliser le trousseau de clés de confiance 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>
J'ai également ajouté des arguments JVM lorsque Maven est lancé dans le fichier mvn.bat de 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% ...
Voici l'invocation Surefire de la JVM utilisée pour exécuter les tests unitaires :
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
Les paramètres de la ligne de commande semblent correspondre aux propriétés du système attendues par Glassfish. dans ses classes com.sun.enterprise.security.ssl.impl.SecuritySupportImpl et 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";
Cependant, elles ne semblent pas être prises en compte par Glassfish, car le certificat expiré ne peut pas être utilisé. expiré est toujours trouvé dans le keystore de confiance par défaut.
J'apprécierais vraiment de recevoir de l'aide. Je vous remercie.