Ответ на отметку времени неверен - BouncyCastle - PullRequest
3 голосов
/ 27 мая 2009

Попытка запросить метку времени (RFC 3161) с помощью BouncyCastle и подключения к http://timestamping.edelweb.fr/service/tsp. Я получаю TimestampResponse с сервера, но, похоже, он не содержит фактической даты.

Это код:

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

Вот вопрос (ы): Кто-нибудь использовал библиотеку Bouncycastle для меток времени и случайно узнал о различных кодах статуса и их значении? Или просто в общем, почему это не работает.

Эта строка, где я ожидаю увидеть дату, просто выбрасывает NullPointer:

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

Кто-нибудь знает о любых других бесплатных серверах отметок времени, соответствующих RFC 3161?

Если вы хотите запустить код, вам нужны jars bouncycastle, которые можно скачать с здесь . Вам понадобятся: провайдер, почта, ч.л.

Спасибо

Ответы [ 3 ]

3 голосов
/ 31 марта 2011

Анализируя связь с wireshark, этот пример выдает ошибку «дайджест сообщения». Код дайджеста, который работает для меня:

    MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
    messageDigest.update("messageImprint".getBytes());
    byte[] digest = messageDigest.digest();
1 голос
/ 28 мая 2009

Кажется, проблема в том, что контент имеет неправильный формат / длину.

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

Но то, что я послал, было просто:

"hello".getBytes();

Создание правильного SHA1Digest из «Привет», и это прекрасно работает.

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;

Я также использовал Digistamp в качестве моего TSA, так как они поддерживают http-аутентификацию, что было требованием.

0 голосов
/ 27 мая 2009

Я обнаружил этот сайт, который является довольно хорошим ресурсом для временных меток, а также содержит список серверов, и, по крайней мере, некоторые из них все еще работают.

...