使用 TSA URL 和 Java API 进行时间戳记

2024-01-07

任何人都可以帮助我理解为签名添加时间戳时使用的流程和 Java API。

我需要使用 TSA url 对文件进行签名并为其添加时间戳”http://timestamp.globalsign.com/scripts/timstamp.dll http://timestamp.globalsign.com/scripts/timstamp.dll“使用 Java API。

我可以使用 java.security API 对文件进行签名,但无法为其添加时间戳。


你的问题有点宽泛......我会给你一些信息,希望它能为你指明正确的方向。

问题是您想要使用时间戳服务来使用该服务执行时间戳签名:http://timestamp.globalsign.com/scripts/timstamp.dll.

首先,这项服务是Time-Stamp Protocol (TSP) RFC3161符合要求,请查看RFC 定义在这里 https://www.ietf.org/rfc/rfc3161.txt清楚地了解它是如何工作的。

不管怎样,我认为你正在寻找一个java代码示例,所以下面我给你一个示例代码,它使用RFC3161的时间戳服务器执行时间戳签名。

该示例中的步骤基本上是:

  1. 首先创建时间戳请求,然后将请求发送到 服务并最终阅读了回复。

    时间戳请求具有以下定义:

    TimeStampReq ::= SEQUENCE  {
       version                      INTEGER  { v1(1) },
       messageImprint               MessageImprint,
       --a hash algorithm OID and the hash value of the data to be time-stamped
       reqPolicy             TSAPolicyId              OPTIONAL,
       nonce                 INTEGER                  OPTIONAL,
       certReq               BOOLEAN                  DEFAULT FALSE,
       extensions            [0] IMPLICIT Extensions  OPTIONAL  }
    

    正如你所看到的,只有messageImprint这是必需的,其余的是 可选取决于您的 tsp 服务为您提供的选项。

  2. Second step is to send this timestamp request using POST method an specifying as a Content-type http-header: application/timestamp-query.

  3. The last part is to parse the response and get the timestamp token.

所以这是代码:

全部一起:

import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.Date;
import java.util.Random;

import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1StreamParser;
import org.bouncycastle.asn1.DERBoolean;
import org.bouncycastle.asn1.DERInteger;
import org.bouncycastle.asn1.DERObjectIdentifier;
import org.bouncycastle.asn1.tsp.MessageImprint;
import org.bouncycastle.asn1.tsp.TimeStampReq;
import org.bouncycastle.asn1.tsp.TimeStampResp;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.tsp.TimeStampResponse;
import org.bouncycastle.tsp.TimeStampToken;

public class TimeStampGenerationSample {

    public static void main(String args[]) throws Exception{

        // for this sample we will use SHA1 to perform the hashes
        // however feel free to use another algorithm since sha1 is weakness
        String sha1Oid = "1.3.14.3.2.26";
        // data to be timestamped
        byte[] data = "some sample data... or your signature...".getBytes();

        // perform the hash of your data
        byte[] digestData = MessageDigest.getInstance(sha1Oid, new BouncyCastleProvider()).digest(data);
        // generate random data to perform your ts, it's optional depends on your ts service
        Random rand = new Random(new Date().getTime()); 
        String nonce = BigInteger.valueOf(rand.nextLong()).toString();          
        // require cert optional (default false... so use false)
        boolean requireCert = false;
        // timestampPolicy it's an oid to identify a policy, if it's required
        // must be provided by your ts service... it's optional so we put null
        String timestampPolicy = null;      

        TimeStampReq ts_req = createTimeStampRequest(digestData, nonce, requireCert, sha1Oid, timestampPolicy);

        // the data to be send to the service
        byte[] dataToSend = ts_req.getEncoded();

        // simply send your data using POST method
        // don't forget to specify http-header content-type as "application/timestamp-query"
        byte[] response = // send the request as you want
        // parse the response 
        ASN1StreamParser asn1Sp = new ASN1StreamParser(response);
        TimeStampResp tspResp = new TimeStampResp((ASN1Sequence)asn1Sp.readObject());
        TimeStampResponse tsr = new TimeStampResponse(tspResp);
        // and get the timestamp token :)
        TimeStampToken token = tsr.getTimeStampToken();
    }

    /**
     * Create the timestamp request
     * @param hashedData
     * @param nonce
     * @param requireCert
     * @param digestAlgorithm
     * @param timestampPolicy
     * @return
     * @throws TimeStampGenerationException
     */
    public static TimeStampReq createTimeStampRequest(byte[] hashedData, String nonce, boolean requireCert, String digestAlgorithm, String timestampPolicy) throws TimeStampGenerationException {

        MessageImprint imprint = new MessageImprint(new AlgorithmIdentifier(digestAlgorithm), hashedData);

        TimeStampReq request = new TimeStampReq(
                imprint, 
                timestampPolicy!=null?new DERObjectIdentifier(timestampPolicy):null, 
                nonce!=null?new DERInteger(nonce.getBytes()):null, 
                new DERBoolean(requireCert), 
                null
        );      

        return request;
    }
}

请注意,我使用bouncycastle API在样本中。

希望这可以帮助,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 TSA URL 和 Java API 进行时间戳记 的相关文章

  • 使用 GWT CellTableBuilder 构建树表

    Is it possible to build a tree table like this http www sencha com examples ExamplePlace basictreegrid with the new Cell
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • 通过 URL 指定控制器类与为每个控制器编写一个脚本相比,有何优缺点?

    今年夏天我安装了两个不同的 PHP 系统 每个都使用两种不同的方法 方法 1 每个任务一个 PHP 文件 该方法需要一个PHP为每个主要任务创建文件 例如 我的上传脚本可以通过http www domain com upload php O
  • eclipse中导入项目文件夹图标

    我在 Eclipse 工作区中新导入的 Maven 项目有J and M项目文件夹顶部的图标 项目和包资源管理器 而其他导入的 Maven 项目只有一个J icon 有人可以解释其中的区别吗 该项目有J装饰器被称为 Java 项目和具有M装
  • 如果使用的 JVM 是 x86 或 x64,则以不同的方式解决 Maven 依赖关系?

    我设置了一个 Maven 存储库来托管一些 dll 但我需要我的 Maven 项目根据使用的 JVM 是 x86 还是 x64 下载不同的 dll 例如 在运行 x86 版本 JVM 的计算机上 我需要从存储库下载 ABC dll 作为依赖
  • 如何让spring为JdbcMetadataStore创建相应的schema?

    我想使用此处描述的 jdbc 元数据存储 https docs spring io spring integration docs 5 2 0 BUILD SNAPSHOT reference html jdbc html jdbc met
  • 如何获取 WebElement 的父级[重复]

    这个问题在这里已经有答案了 我试过了 private WebElement getParent final WebElement webElement return webElement findElement By xpath 但我得到
  • 如何将 Jfreechart(饼图)添加到 netbeans 的面板中

    我正在使用 netbeans gui 编辑器 并且正在尝试添加一个本身位于内部框架中的 Jfreechart 并且这个内部框架我想将其添加到面板中 正如您在此图中看到的那样 抱歉 我无法直接发布图像 因为我新手 http www flick
  • Cloudfoundry:如何组合两个运行时

    cloundfoundry 有没有办法结合两个运行时环境 我正在将 NodeJS 应用程序部署到 IBM Bluemix 现在 我还希望能够执行独立的 jar 文件 但应用程序失败 APP 0 bin sh 1 java not found
  • Spring Security OAuth2简单配置

    我有一个简单的项目 需要以下简单的配置 我有一个 密码 grant type 这意味着我可以提交用户名 密码 用户在登录表单中输入 并在成功时获得 access token 有了该 access token 我就可以请求 API 并获取用户
  • 在 Spring Boot Actuator 健康检查 API 中启用日志记录

    我正在使用 Spring boot Actuator APIproject https imobilenumbertracker com 拥有一个健康检查端点 并通过以下方式启用它 management endpoints web base
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 如何在 Eclipse Java 动态 Web 项目中使用 .properties 文件?

    我正在 Eclipse 中开发动态 Web 项目 我创建了一个 properties 文件来存储数据库详细信息 用户名 密码等 我通过右键单击项目和 New gt File 添加它 我使用了Java util包Properties类 但它不
  • 如何通过 Inno Setup for NetBeans 使用自定义 .iss 文件

    我将 Inno Setup 5 与 NetBeans 8 一起使用 并且我已经能够创建一个安装程序来安装该应用程序C users username local appname 但是我希望将其安装在C Programfiles 我如何在 Ne
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • JVM:是否可以操作帧堆栈?

    假设我需要执行N同一线程中的任务 这些任务有时可能需要来自外部存储的一些值 我事先不知道哪个任务可能需要这样的值以及何时 获取速度要快得多M价值观是一次性的而不是相同的M值在M查询外部存储 注意我不能指望任务本身进行合作 它们只不过是 ja
  • 解决错误javax.mail.AuthenticationFailedException

    我不熟悉java中发送邮件的这个功能 我在发送电子邮件重置密码时遇到错误 希望你能给我一个解决方案 下面是我的代码 public synchronized static boolean sendMailAdvance String emai
  • Hibernate 和可序列化实体

    有谁知道是否有一个框架能够从实体类中剥离 Hibernate 集合以使它们可序列化 我查看了 BeanLib 但它似乎只进行实体的深层复制 而不允许我为实体类中的集合类型指定实现映射 BeanLib 目前不适用于 Hibernate 3 5
  • Android AutoCompleteTextView 带芯片

    我不确定我是否使用了正确的词语来描述此 UI 功能 但我已附上我希望在我的应用程序中实现的目标的快照 它由 Go SMS 使用 用户在编辑文本中键入联系人 在用户从完成下拉列表中选择联系人后 该联系人将被插入到编辑文本中 如附图所示 编辑文
  • Java &= 运算符应用 & 或 && 吗?

    Assuming boolean a false 我想知道是否这样做 a b 相当于 a a b logical AND a is false hence b is not evaluated 或者另一方面 这意味着 a a b Bitwi

随机推荐

  • pywinauto 未检测到子窗口

    我正在使用最新版本 迄今为止 的 pywinauto 还使用 PyInspect uia 来识别控件 我正在自动化应用程序上的控件 该过程的一部分是检查触发窗口从菜单选择 如 编辑 gt 设置 中出现后弹出的窗口上的几个框 问题是 pywi
  • 如何合并两个 JObject? [复制]

    这个问题在这里已经有答案了 我有第一个 json data id id1 field field1 paging prev link1 第二个 data id id2 field field2 paging prev link2 我想合并
  • Java swing 动画看起来不稳定。如何让它看起来专业?

    更新 半复杂动画 摇摆计时器 火车残骸 问题的最终根源是 java 计时器 无论是 swing 版本还是实用程序版本 它们不可靠 尤其是在跨操作系统比较性能时 通过实现普通线程 程序可以在所有系统上运行得非常流畅 http zetcode
  • 呈现为下拉列表的智能字段不显示说明

    我有一个智能字段 我定义如下
  • pandas read_excel 同一张纸上的多个表

    是否可以使用 pandas 从 Excel 工作表文件中读取多个表 就像是 读取 table1 从第 0 行到第 100 行 读取 table2 从第 102 行到第 202 行 我编写了以下代码来自动识别多个表 以防您需要处理许多文件并且
  • 配置不正确:包含的 urlconf .urls 中没有任何模式

    我有一个 django 1 6 x 项目 可以在开发服务器上正常运行 但在 Ubuntu 12 04 3 上的 Apache2 2 2 22 1 和 mod wsgi 3 3 4 下失败 并出现错误 配置不正确 包含的 urlconf er
  • Bash 波形符扩展

    是否可以添加 bash 用于波浪号扩展的规则 我想让 data 扩展到 data users me scratch 扩展到 data scratch me 等等 这可能吗 还是 bash 对 的控制太紧 Thanks Andrew 波形符扩
  • 将对象添加到 NSMutableArray 时遇到问题

    我在将对象添加到 NSMutableArray array 时遇到问题 Controller m import Controller h implementation Controller void parser NSString stri
  • 如何使用canvas在单页中绘制三个三角形?

    function areaval var equation number val var secod acure val var thrd pmet val var frd cmet val var a Math abs parseInt
  • std::string 复制构造函数在 GCC 4.1.2 中不深入?

    我想知道我是否误解了什么 复制构造函数来自std string not复制其内容 string str1 Hello World string str2 str1 if str1 c str str2 c str Same pointers
  • 将 Spring 应用程序从 XML 迁移到注释

    我继承了一个 Spring 3 应用程序 它使用 XML 文件来定义 Bean 并将其连接在一起 我知道从 Spring 2 开始 这些大部分都可以用注释替换 我希望 Spring 能够 通过扫描某些包中的类来检测 bean 无论使用什么注
  • UISlider 释放触摸时过于敏感

    当释放 UISlider 上的触摸时 滑块的值会发生轻微且无法控制的变化 它非常敏感 甚至当手指从屏幕上松开时它就会发生变化 如何才能让用户可以毫无问题地设置他想要的值 这就是我创建 UISlider 的方式 UISlider slider
  • 如何使用 javascript 调整 Base64 编码的数据 URI PNG 的大小?

    我有一个 Base64 编码的 PNG 从 Web 套接字中挤出到网页中 我使用 Data URI 显示该网页 img src javascript 或其某些风格是否有一种方法可以将我收到的图像大小调整为较小的 base64 数据 URI
  • Unity 5 在 Mac OSX Yosemite 下崩溃

    有人在 Mac OSX Yosemite 上遇到过这个问题吗 构建后项目大小超过 250Mb 电脑参数 MacBook 13 i7 CPU 16Gb RAM 1 5GB GPU EDIT Mac OSX 的完整崩溃日志 http paste
  • 将参数传递给 xslt 中的 javascript 脚本

    是否可以在 XSLT 中处理 javascript 函数的参数 其中脚本位于标签之间 如果可能的话有人可以举个例子 谢谢 我认为您对这两件事感到困惑 XSLT 是用于 在本例中 生成 HTML javascript 的东西 一旦浏览器接收到
  • 带 tab-id 的 RedirectToAction()

    我在 ASP NET MVC 中有一个 Web 应用程序 其中有一个带有表单的 jqueryUI 选项卡 当我提交时 我想返回到打开的选项卡 使用 RedirectToAction 我创建了 url www foo com CV edit
  • 如何禁用 .htaccess 文件中的 mod_security?

    我们怎样才能禁用mod security通过使用 htaccessApache 服务器上的文件 我在我的个人域上使用 WordPress 并发布了一篇帖子 其中内容包含一些代码块 并且按照我的托管提供商的说法mod security出现错误
  • Sublime Text 3 中的 Qt 构建系统不起作用

    我有以下无法正常工作的构建系统文件 cmd qmake project cmd qmake cmd make working dir project path folder 没有生成任何文件 通常应创建以下文件 qmake project
  • Coredata - “NSObjectInaccessibleException - CoreData 无法完成错误”

    我是核心数据的新手 仍在弄清楚具体细节 这个错误已经困扰我几个小时了 我似乎找不到解决方案 任何帮助是极大的赞赏 问题是这样的 我有两个视图 它们从服务器获取数据并更新 UI 我已经这样设置流程了 view1 gt 从服务器发送 HTTP
  • 使用 TSA URL 和 Java API 进行时间戳记

    任何人都可以帮助我理解为签名添加时间戳时使用的流程和 Java API 我需要使用 TSA url 对文件进行签名并为其添加时间戳 http timestamp globalsign com scripts timstamp dll htt