2009-05-27 6 views
3

Vous tentez de demander un horodatage (RFC 3161) en utilisant BouncyCastle et en vous connectant à http://timestamping.edelweb.fr/service/tsp. J'obtiens une réponse de TimestampResponse du serveur mais il semble être sans date réelle.La réponse d'horodatage est incorrecte - BouncyCastle

Voici le code:

public static void main(String[] args) { 
    String ocspUrl = "http://timestamping.edelweb.fr/service/tsp"; 
    byte[] digest = "hello".getBytes(); 
    OutputStream out = null; 

    try { 
     TimeStampRequestGenerator reqgen = new TimeStampRequestGenerator(); 
     TimeStampRequest req = reqgen.generate(TSPAlgorithms.SHA1, digest); 
     byte request[] = req.getEncoded(); 

     URL url = new URL(ocspUrl); 
     HttpURLConnection con = (HttpURLConnection) url.openConnection(); 

     con.setDoOutput(true); 
     con.setDoInput(true); 
     con.setRequestMethod("POST"); 
     con.setRequestProperty("Content-type", "application/timestamp-query"); 

     con.setRequestProperty("Content-length", String.valueOf(request.length)); 
     out = con.getOutputStream(); 
     out.write(request); 
     out.flush(); 

     if (con.getResponseCode() != HttpURLConnection.HTTP_OK) { 
      throw new IOException("Received HTTP error: " + con.getResponseCode() + " - " + con.getResponseMessage()); 
     } 
     InputStream in = con.getInputStream(); 
     TimeStampResp resp = TimeStampResp.getInstance(new ASN1InputStream(in).readObject()); 
     TimeStampResponse response = new TimeStampResponse(resp); 
     response.validate(req); 
     System.out.println(response.getTimeStampToken().getTimeStampInfo().getGenTime()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Voici la question (s): Quelqu'un at-il utilisé la bibliothèque de bouncycastle pour horodatages et arrive à connaître les différents codes d'état et ce qu'ils veulent dire? Ou juste en général pourquoi cela ne semble pas fonctionner.

Cette ligne où je me attends à une date jette juste un NullPointer:

System.out.println(response.getTimeStampToken().getTimeStampInfo().getGenTime()); 

Est-ce que quelqu'un sait de tous les autres serveurs d'horodatage conformes RFC 3161 qui sont libres?

Si vous souhaitez exécuter le code, vous avez besoin des fichiers bouncycastle qui peuvent être téléchargés depuis here. Vous aurez besoin de: fournisseur, mail, tsp.

Merci

Répondre

1

Le problème semble être que le contenu est de mauvais format/longueur.

TimeStampRequest req = reqgen.generate(TSPAlgorithms.SHA1, digest); 

Mais ce que je vous ai envoyé était:

"hello".getBytes(); 

Création d'un SHA1Digest approprié de « bonjour » et ce travail très bien.

static public byte[] calculateMessageDigest() 
     throws NoSuchAlgorithmException, IOException { 
    SHA1Digest md = new SHA1Digest(); 

    byte[] dataBytes = "helloooooooooooooo".getBytes(); 
    int nread = dataBytes.length; 
    md.update(dataBytes, 0, nread); 
    byte[] result = new byte[32]; 
    md.doFinal(result, 0); 
    return result; 

J'ai aussi fini par utiliser Digistamp comme mon TSA, car ils prennent en charge l'authentification http qui était une exigence.

0

Je trouve le site this qui est une assez bonne ressource pour Horodatage et il a également une liste de serveurs et au moins certains d'entre eux semble être encore opérationnel.

+1

Le lien est rompu (404) –

3

En analysant la communication avec wireshark, cet exemple me donne une erreur de "mauvais message". Un code digest qui fonctionne pour moi:

MessageDigest messageDigest = MessageDigest.getInstance("SHA-1"); 
    messageDigest.update("messageImprint".getBytes()); 
    byte[] digest = messageDigest.digest(); 
Questions connexes