2013-05-07 5 views
2

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?

+0

Le certificat est-il généré sur la même machine que le test? – mikey

+0

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

+0

Eh bien, le problème a été fermé comme "Non reproductible". – Revolit

Répondre

0

Comme je l'ai dit, il a été fermé comme "Non reproductible".

C'est une erreur assez étrange ... Nous n'avons aucune idée de la manière dont ils ont fait cette exception. Ils n'ont pas appelé checkValidity() à des dates antérieures, seules les dates utilisées sont fournies par le système. Je suppose que c'est l'une de ces erreurs Java mystérieuses :) Jusqu'à présent, aucune mention n'est venue d'une autre erreur comme celle-ci, et cela fait un mois que nous avons fermé le problème.

Quoi qu'il en soit, je voulais juste répondre à cette question afin qu'elle n'apparaisse pas comme sans réponse. J'espère que ce n'est pas un problème.

+0

Dans quel fuseau horaire étiez-vous? L'heure du certificat doit être exprimée en heure UTC. – Bruno

Questions connexes