2009-05-27 126 views
3

試圖通過使用BouncyCastle請求時間戳(RFC 3161)並連接到http://timestamping.edelweb.fr/service/tsp。我確實從服務器獲取了TimestampResponse,但它似乎沒有實際的日期。時間戳響應不正確 - BouncyCastle

這是代碼:

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

這裏的問題(S): 有沒有人使用BouncyCastle的圖書館的時間戳和碰巧了解不同的狀態代碼,他們是什麼意思?或者只是爲什麼這似乎不起作用。

這條線,我希望看到一個日期只是拋出一個空指針:

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

有誰知道,不含任何其他RFC 3161兼容的時間戳服務器?

如果您想運行代碼,您需要可以從here下載的bouncycastle罐子。你將需要:提供者,郵件,茶匙。

感謝

回答

1

問題似乎是內容的格式和長度是錯誤的。

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

我發現this網站這是一個時間戳相當不錯的資源,它也有服務器的列表,並至少有幾個人似乎仍然是可操作的。

+1

的鏈接斷開(404) – 2012-05-18 09:54:01

3

用wireshark分析通信,這個例子給我一個「錯誤的消息摘要」錯誤。 一個摘要的代碼爲我的作品是:

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