46 votes

jarsigner : Ce jar contient des entrées dont la chaîne de certificats n'est pas validée

J'essaie de signer le code d'un fichier JAR et j'utilise le JDK 1.7u1. Nous avons acquis un certificat de signature de code GoDaddy et j'ai suivi les instructions (Approche 1) ici : http://help.godaddy.com/article/4780

Le JAR se signe bien, mais dès que j'essaie d'exécuter la commande : jarsigner -verify sur mon JAR signé en utilisant le JDK 1.7u1, j'obtiens la sortie suivante :

s        180 Mon Dec 05 10:24:32 EST 2011 META-INF/MANIFEST.MF

      [entry was signed on 12/5/11 10:24 AM]
      X.509, CN=Removed Company Name, O=Removed Company Name, L=Removed City, ST=Removed State, C=US
      [certificate is valid from 12/2/11 4:30 PM to 12/2/13 4:30 PM]
      X.509, SERIALNUMBER=00000000, CN=Go Daddy Secure Certification Authority, OU=http://certificates.godaddy.com/repository, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
      [certificate is valid from 11/15/06 8:54 PM to 11/15/26 8:54 PM]
      X.509, OU=Go Daddy Class 2 Certification Authority, O="The Go Daddy Group, Inc.", C=US
      [certificate is valid from 6/29/04 1:06 PM to 6/29/34 1:06 PM]
      [CertPath not validated: null]

         342 Mon Dec 05 10:24:34 EST 2011 META-INF/JAVACSC.SF
        6180 Mon Dec 05 10:24:34 EST 2011 META-INF/JAVACSC.RSA
           0 Mon Dec 05 10:24:30 EST 2011 META-INF/
sm      2161 Wed Nov 30 10:23:20 EST 2011 C:/Users/Seth/Desktop/JAR/RunAppSF.class

      [entry was signed on 12/5/11 10:24 AM]
      X.509, CN=Removed Company Name, O=Removed Company Name, L=Removed City, ST=Removed State, C=US
      [certificate is valid from 12/2/11 4:30 PM to 12/2/13 4:30 PM]
      X.509, SERIALNUMBER=00000000, CN=Go Daddy Secure Certification Authority, OU=http://certificates.godaddy.com/repository, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
      [certificate is valid from 11/15/06 8:54 PM to 11/15/26 8:54 PM]
      X.509, OU=Go Daddy Class 2 Certification Authority, O="The Go Daddy Group, Inc.", C=US
      [certificate is valid from 6/29/04 1:06 PM to 6/29/34 1:06 PM]
      [CertPath not validated: null]

  s = signature was verified 
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.

Warning: 
This jar contains entries whose certificate chain is not validated.

J'ai également essayé le jarsigner -verify en utilisant le même JAR que ci-dessus sur le JDK 1.6u26 et 1.6u14 et il est apparu comme étant correct. (Sortie ci-dessous de la 1.6u26).

         180 Mon Dec 05 10:24:32 EST 2011 META-INF/MANIFEST.MF
         342 Mon Dec 05 10:24:34 EST 2011 META-INF/JAVACSC.SF
        6180 Mon Dec 05 10:24:34 EST 2011 META-INF/JAVACSC.RSA
           0 Mon Dec 05 10:24:30 EST 2011 META-INF/
sm      2161 Wed Nov 30 10:23:20 EST 2011 C:/Users/Seth/Desktop/JAR/RunAppSF.class

      [entry was signed on 12/5/11 10:24 AM]
      X.509, CN=Removed Company Name, O=Removed Company Name, L=Removed City, ST=Removed State, C=US
      [certificate is valid from 12/2/11 4:30 PM to 12/2/13 4:30 PM]
      X.509, SERIALNUMBER=00000000, CN=Go Daddy Secure Certification Authority, OU=http://certificates.godaddy.com/repository, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
      [certificate is valid from 11/15/06 8:54 PM to 11/15/26 8:54 PM]
      [KeyUsage extension does not support code signing]
      X.509, OU=Go Daddy Class 2 Certification Authority, O="The Go Daddy Group, Inc.", C=US
      [certificate is valid from 6/29/04 1:06 PM to 6/29/34 1:06 PM]

  s = signature was verified 
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.

Est-ce que je manque une étape supplémentaire que je dois suivre pour que le JAR soit signé correctement pour le JDK 1.7 ?

82voto

Alain P Points 296

J'ai eu le même problème et si cela peut aider les autres, le problème est dans la façon dont jarsigner trouve le keystore.

Afin de résoudre le problème, faites :

jarsigner -verify -keystore xxxx.jks mysignedjar.jar

49voto

gsbabil Points 2122

Vous êtes no Il ne vous manque rien et vous êtes définitivement no seul avec ce problème. Après une lutte de près de 12 heures, j'ai compris que la racine du problème réside dans le mélange des binaires de JDK 1.7 avec une ancienne version de Java telle que JRE-1.6 . Pour être plus précis, keytool est livré avec JRE alors que JDK Les navires sont équipés à la fois keytool y jarsigner .

Donc, pour résoudre le problème, j'ai complètement désinstallé JDK-1.7 de mon système et installé JDK-1.6 Update 30 . Maintenant, si je faisais jarsigner -verify -verbose -certs blah.jar il produirait jar verified sans aucun avertissement, ce qui, je crois, est ce que vous attendez.

19voto

Daniele Segato Points 1281

C'est juste un avertissement que vous pouvez ignorer.

Si vous ne voulez vraiment pas l'ignorer, dites à jarsigner où se trouve votre keystore lorsque vous vérifiez.

jarsigner -verbose -verify -keystore ${KEYSTORE_PATH} ${YOUR_JAR_FILE}

Il s'agit simplement d'une nouvelle fonctionnalité du JDK 7.

2voto

lyaffe Points 448

J'ai constaté que le message "This jar contains entries whose certificate chain is not validated" est également imprimé si vous signez le fichier Jar en utilisant le JRE 1.7.0_21 et le vérifiez avec une version inférieure du JRE 1.7.0.

Conclusion : il n'est pas nécessaire de passer à Java 1.6, il suffit d'utiliser la même version de jarsigner pour la signature et la vérification.

0voto

Casey Points 19286

Si vos certificats proviennent de Entrust, assurez-vous que vous utilisez le certificat racine le plus récent.

http://www.entrust.net/knowledge-base/technote.cfm?tn=7875

Problème :

Vous recevez un message d'erreur indiquant que votre certificat SLL a échoué en raison de l'absence d'un champ Contraintes de base.

Solution :

En 2009, Entrust a réédité le certificat racine de 2048 bits pour y inclure le champ Contraintes de base (cn=Entrust.net Autorité de certification (2048), valable jusqu'au 24/07/2029). Entrust a cessé de diffuser le 2048-bit Root original à travers des mises à jour de Root dans Windows et Java (à partir de la version 1.6 mise à jour 22). Le certificat racine mis à jour contenant les contraintes de base peut être trouvé ici :

https://www.entrust.net/downloads/binary/entrust_2048_ca.cer

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X