0%

电子合同:设计与实现思路

前段时间刚刚完工域名解析系统,马不停蹄,公司要求马上开工电子合同项目的研发,相关的实现代码肯定不能写出来,但是这段时间总结下来的设计与实现思路还是可以写写的。希望能够对眼前看这篇文章的你有所帮助。

简述

何谓电子合同?

可以百度到的定义我这里就不说了,电子合同最关键的在于两个地方,一是签署合同人的数字签名,二是时间戳。

数字签名?时间戳?这个时间戳有什么关键的,java几行代码就搞出来了么~

非也非也。

签署人的数字签名必须有国家认可的CA机构颁发个人证书来签署,时间戳也相应的由这家CA机构来提供。

简单的说,数字签名用来表明签署合同的是他本人,时间戳用来保证这份合同在签署之后内容没有变动。

设计与实现

数字签名的实现

首先,数字签名要搞清一个概念,签名的过程是我们将用户的个人证书签署在一份PDF文本上。所以实现的关键就在这两点上:

  • 获取个人证书

  • 将个人证书签署在pdf文本上。

个人证书的获取

首先对接到国内的一家CA机构,注意我们需要的产品是客户端个人证书,让对方提供至少两个接口:

  • 提交用户名称、身份证号码来生成一份用户私钥。

  • 调用用户私钥生成一份pfx证书。

得到pfx证书后,我们可以说个人证书获取成功了。

个人证书签署在pdf文本上

这一步的实现比较难,但可以通过keytool和itext这两个工具来实现。具体的实现步骤脱离代码没有办法讲清楚,但代码属于公司机密,我不予以分享。

时间戳的实现

时间戳很简单,一般的CA机构都直接提供免费的时间戳服务地址,比如沃通的地址为: http://timestamp.wosign.com/rfc3161,然后具体的调用和实现请参考对应机构提供的说明文档。

难点与解决思路

  • 个人证书的存放:可以利用阿里云提供的加密服务,因为他们提供了专门的硬件密码机。