2 Stimmen

Zeitstempel-Antwort ist nicht korrekt - BouncyCastle

Versuch der Abfrage eines Zeitstempels (RFC 3161) mit BouncyCastle und Verbindung zu http://timestamping.edelweb.fr/service/tsp . Ich erhalte zwar eine TimestampResponse vom Server zurück, doch scheint diese kein tatsächliches Datum zu enthalten.

Dies ist der 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();
    }
}

Hier die Frage(n): Hat jemand die Bibliothek von Bouncycastle für Zeitstempel verwendet und weiß zufällig etwas über die verschiedenen Statuscodes und was sie bedeuten? Oder nur im Allgemeinen, warum dies nicht scheinen zu funktionieren.

Diese Zeile, wo ich erwarte, ein Datum zu sehen, wirft nur einen NullPointer:

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

Kennt jemand andere RFC 3161-konforme Zeitstempel-Server, die kostenlos sind?

Wenn Sie den Code ausführen möchten, benötigen Sie die bouncycastle jars, die Sie hier herunterladen können aquí . Sie benötigen: Provider, Post, tsp.

Danke

2voto

endre Punkte 1343

Wenn ich die Kommunikation mit Wireshark analysiere, erhalte ich bei diesem Beispiel den Fehler "bad message digest". Ein Digest-Code, der bei mir funktioniert, ist:

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

1voto

willcodejavaforfood Punkte 41426

Das Problem scheint darin zu bestehen, dass der Inhalt das falsche Format/die falsche Länge hat.

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

Aber was ich eingesandt habe, war gerecht:

"hello".getBytes();

Das Erstellen eines korrekten SHA1Digest aus "hallo" und dies funktioniert einwandfrei.

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;

Ich habe auch Digistamp als meine TSA, da sie http-Authentifizierung unterstützen, was eine Voraussetzung war.

0voto

willcodejavaforfood Punkte 41426

Ich fand este die eine recht gute Quelle für Zeitstempel ist und auch eine Liste von Servern enthält, von denen zumindest einige noch in Betrieb zu sein scheinen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X