J'ai un problème que j'essayais de résoudre toute la journée, mais je ne pouvais pas reconstruire. J'ai une question qui jette une CertificateNotYetValidException
exception:java.security.cert.CertificateNotYetValidException lancé sur nouvellement créé java.security.cert.X509Certificate
java.security.cert.CertificateNotYetValidException: certificate not valid till 20130502110036GMT+00:00
Ainsi, il est pas valable jusqu'en 2013 05 02 11: 00,3600 Mais ils ont essayé de le vérifier, et l'horodatage du journal suivant est: 2013-05 -02 11: 00: 34,759 Alors ils ont essayé de le vérifier .013 secondes avant qu'il ne soit valide, mais comment est-ce possible? J'ai écrit un test unitaire qui a fait des milliers de créer une authentification (qui a le certificat) et écrit la date actuelle immédiatement, il arrondit toujours au centième de seconde, donc je ne pouvais pas reproduire l'erreur.
Le certificat est généré par le générateur de certificat Bouncycastle.
Voici un échantillon de mon test JUnit:
xa = (Authentication) a;
log.info("----current date: " + sdf.format(new Date()));
log.info("not valid before: " + sdf.format(xa.getCertificate().getNotBefore()));
Et un exemple de sortie:
INFO [] ----current date: 2013-05-07 12:03:13.116
INFO [] not valid before: 2013-05-07 12:03:12.000
So, if i could of reproduced the issue, i would get something like this:
INFO [] ----current date: 2013-05-07 12:03:13.116
INFO [] not valid before: 2013-05-07 12:03:14.000
We use java.security.cert.X509Certificate
J'ai trouvé un moyen de reproduire le problème, mais cela est très loin tiré par les cheveux, je espérons vraiment qu'ils ne le faisaient pas dans leurs essais:
xa.getCertificate().checkValidity(new Date(new Date().getTime()-10000));
Fondamentalement, j'appelle CheckValidity() sur un Earlie r Date, et ainsi j'ai une trace de pile très similaire (pas la même chose, parce que j'ai utilisé mon propre test unitaire). Mais je suppose qu'ils n'ont rien fait de tel ... une autre idée comment je peux réaliser cette erreur?
Le certificat est-il généré sur la même machine que le test? – mikey
Le cert est généré et il y a un verify() appelé juste après, dans la même méthode, donc oui, tout est exécuté sur la même machine. Le problème a été mis de côté pour l'instant, mais je posterai la solution une fois qu'elle aura été comprise. (Sry pour la réponse tardive, je n'ai pas remarqué le commentaire 1 petite ligne, je suis nouveau ici :)) – Revolit
Eh bien, le problème a été fermé comme "Non reproductible". – Revolit