前段时间刚刚完工域名解析系统,马不停蹄,公司要求马上开工电子合同项目的研发,相关的实现代码肯定不能写出来,但是这段时间总结下来的设计与实现思路还是可以写写的。希望能够对眼前看这篇文章的你有所帮助。
简述
何谓电子合同?
可以百度到的定义我这里就不说了,电子合同最关键的在于两个地方,一是签署合同人的数字签名,二是时间戳。
数字签名?时间戳?这个时间戳有什么关键的,java 几行代码就搞出来了么 ~
非也非也。
签署人的数字签名必须有国家认可的 CA 机构颁发个人证书来签署,时间戳也相应的由这家 CA 机构来提供。
简单的说,数字签名用来表明签署合同的是他本人,时间戳用来保证这份合同在签署之后内容没有变动。
设计与实现
数字签名的实现
首先,数字签名要搞清一个概念,签名的过程是我们将用户的个人证书签署在一份 PDF 文本上。所以实现的关键就在这两点上:
-
获取个人证书
-
将个人证书签署在 pdf 文本上。
个人证书的获取
首先对接到国内的一家 CA 机构,注意我们需要的产品是客户端个人证书,让对方提供至少两个接口:
-
提交用户名称、身份证号码来生成一份用户私钥。
-
调用用户私钥生成一份 pfx 证书。
得到 pfx 证书后,我们可以说个人证书获取成功了。
个人证书签署在 pdf 文本上
这一步的实现比较难,但可以通过 keytool 和 itext 这两个工具来实现。具体的实现步骤脱离代码没有办法讲清楚,但代码属于公司机密,我不予以分享。
时间戳的实现
时间戳很简单,一般的 CA 机构都直接提供免费的时间戳服务地址,比如沃通的地址为: http://timestamp.wosign.com/rfc3161,然后具体的调用和实现请参考对应机构提供的说明文档。
难点与解决思路
- 个人证书的存放:可以利用阿里云提供的加密服务,因为他们提供了专门的硬件密码机。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于