Quand j'essayais de m'auto-signer dans le pot comme ci-dessous.
jarsigner -keystore my keystore myjar.jar myalias
Il donne un avertissement comme:
Aucun -tsa ou -tsacert n'est fourni et ce pot n'est pas horodaté. Sans horodatage, les utilisateurs peuvent ne pas être en mesure de valider ce bocal après la date d'expiration du certificat du signataire (2014-05-08) ou après toute date de révocation future.
Veuillez aider à résoudre le problème.
Le récent Java 7 fournit un avertissement (de courtoisie?) À propos de quelque chose qui est en place depuis une décennie ...
Trusted Timestamping a été introduit dans Java 5 (2004). La motivation était que les développeurs ne soient pas obligés "de re-signer les fichiers JAR déployés chaque année" lorsque les certificats expiraient.
→ http://docs.Oracle.com/javase/1.5.0/docs/guide/security/time-of-signing.html
Une autorité d'horodatage (TSA) basée sur l'URL est généralement fournie par l'autorité de certification (CA) émettrice pour fonctionner avec les mêmes certificats que l'autorité de certification a émis. Par exemple, l'url digicert tsa peut être accessible comme suit:
jarsigner -tsa http://timestamp.digicert.com [.. other options]
→ http://www.digicert.com/code-signing/Java-code-signing-guide.htm
Horodatage avec certificat auto-signé peut-être un objectif difficile à atteindre car (1) un horodatage TSA doit être une transaction sans lien de confiance (qui exclut l '"auto-horodatage"), et (2 ) les URL TSA typiques sont configurées pour fonctionner avec les certificats fournis par la même organisation d'autorité de certification (c'est-à-dire que l'URL TSA ne traite pas un certificat auto-signé)
Mise à jour:
URL à essayer pour horodater les certificats auto-signés:
-tsa http://sha256timestamp.ws.symantec.com/sha256/timestamp
(par commentaire de brad-turek)Pour un réseau privé, on pourrait envisager une autorité d'horodatage interne telle que Thales (nCipher) Time Stamp Server (ou historiquement OpenTSA)
Cet avertissement vous indique que le certificat de votre pot expirera en mai. Par conséquent, les utilisateurs ne pourront pas exécuter votre programme après cette date.
Pour améliorer la situation, la fonction d'horodatage a été ajoutée. De cette façon, vous pouvez dire aux utilisateurs: "J'ai utilisé le certificat à ce moment (qui est fourni et vérifié par l'agence d'horodatage - tsa), alors qu'il était encore valide!" Tant que vous ne modifiez pas et ne démissionnez pas de votre pot, il s'exécutera toujours, même après l'expiration du certificat, car les utilisateurs voient qu'au moment de la création, le certificat était en effet valide.
Pour référence: http://docs.Oracle.com/javase/7/docs/technotes/guides/security/time-of-signing.html
tl; dr: si vous ignorez l'avertissement, votre pot ne fonctionnera pas après le 14-05-08. Ajoutez un horodatage et il fonctionnera aussi longtemps que vous ne modifiez rien.
Cordialement
J'étais confronté au même problème. Sans l'horodatage, le pot ne serait pas signé.
Lorsque vous ajoutez -tsa http://timestamp.digicert.com
, il ne donnerait aucun avertissement ou erreur mais le pot ne serait pas signé.
Mais j'ai ajouté la partie suivante et cela a fonctionné pour moi.
-tsacert alias
Donc, fondamentalement, ma commande finale était
jarsigner -verbose -tsa http://timestamp.digicert.com -tsacert alias -sigalg SHA256withRSA -digestalg SHA1 -keystore my-release-key.keystore Android-release-unsigned.apk alias_name
Se souvenir du alias_name
dans la commande et celui dans keystore
doivent être identiques.