SpringBoot实战(三十一)集成iText5,实现RSA签署PDF

devtools/2024/11/14 9:10:49/

目录

    • 一、什么是电子签章?
      • 1.1 定义
      • 1.2 电子签章的工作原理
      • 1.3 电子签章的优势
    • 二、准备工作:证书生成、印章生成
      • 2.1 证书生成
      • 2.2 印章生成
    • 三、Java代码实现 RSA 签署 PDF
      • 3.1 坐标签署
      • 3.2 关键字签署
      • 3.3 日期签署
      • 3.4 骑缝章签署
      • 3.5 文本域签署

一、什么是电子签章?

1.1 定义

  • 电子签章 是一种数字技术,用于在电子文档上添加一个可视化的印章图像,并结合数字签名技术确保文档的完整性和来源的真实性。

电子签章通常包括以下几个要素:

  1. 可视化印章图像: 类似于传统的物理印章,电子签章通常包含一个可视化的图像,显示公司的名称、印章编号等信息。
  2. 数字签名: 使用非对称加密技术(如 RSAECC)生成的数字签名,确保文档在签署后为被篡改。
  3. 时间戳: 通过时间戳服务器(TSA)获取的时间戳信息,确保签名的信息是可信的。
  4. 证书: 使用数字证书来验证签署者的身份,数字证书通常由受信任的证书颁发机构(CA)签发。

1.2 电子签章的工作原理

在这里插入图片描述

  1. 生成数字证书: 签署者向证书颁发机构(CA)申请数字证书,CA 验证签署者的身份信息后,签发数字证书。
  2. 生成数字签名: 签署者使用私钥对电子文档的哈希值进行签名,生成数字签名。
  3. 添加时间戳: 签署者向时间戳服务器(TSA)发送时间戳请求,TSA 返回带有时间戳的时间戳令牌。
  4. 嵌入电子签章: 将可视化的印章图像、数字签名和时间戳令牌嵌入到电子文档中,形成电子签章。

在这里插入图片描述

  1. 验证电子签章: 接收者使用签署者的公钥验证数字签名的正确性,检查时间戳的有效性,确保文档的完整性和来源的真实性。

1.3 电子签章的优势

  1. 法律效力: 基于《中华人民共和国电子签名法》等相关法规和技术规范,具有法律效力的电子签章一定是需要使用 CA 数字证书进行对文件签名,并把 CA 数字证书存放在签名后文件中。
  2. 安全性: 电子签章结合了数字签名和时间戳技术,确保文档在签署后未被篡改,提高了文档的安全性和可信度。
  3. 便捷性: 电子签章可以在任何地点、任何时间进行,无需物理印章和纸张,大大提高了工作效率。
  4. 成本效益: 电子签章减少了纸张和物理印章的使用,降低了办公成本和环境影响。

二、准备工作:证书生成、印章生成

2.1 证书生成

1)在线生成证书: https://myssl.com/create_test_cert.html

可以根据需要生成各种类型的证书,填写相关信息,点击【生成】按钮即可,如下图所示:

在这里插入图片描述

生成之后,我们需要对 证书私钥 进行下载,如下图所示:

在这里插入图片描述

下载后,文件如下所示:

在这里插入图片描述

2)在线证书格式转换: https://www.lddgo.net/encrypt/cert-format-converter

打开网页后,导入上一步的证书文件、私钥文件,点击【转换】,如下图所示:

在这里插入图片描述

转换之后,点击【下载】,即可下载 .p12 格式的证书文件,如下图所示:

在这里插入图片描述

下载文件如下:

在这里插入图片描述

2.2 印章生成

  • 印章生成网址: http://web.aa6666.com/

在这里插入图片描述


三、Java代码实现 RSA 签署 PDF

电子签章 根据加密算法的不同 分为 RSA 标准签署和 SM2 国密签署两种,这里我们只讨论 RSA 标准签署的实现方式。

注意: 如果遇到如下报错,说明 JDK 版本过低导致 KeyStore 加载 PKCS12 格式证书报错,如果使用的是 JDK8,需要升级到 1.8.0_301 以上。

  • java.io.IOException: parseAlgParameters failed: ObjectIdentifier() – data isn’t an object ID (tag = 48)
java.io.IOException: parseAlgParameters failed: ObjectIdentifier() -- data isn't an object ID (tag = 48)at sun.security.pkcs12.PKCS12KeyStore.parseAlgParameters(PKCS12KeyStore.java:792)at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1998)at java.security.KeyStore.load(KeyStore.java:1445)at com.demo.service.impl.ITextSignServiceImpl.getSignCert(ITextSignServiceImpl.java:289)at com.demo.service.impl.ITextSignServiceImpl.main(ITextSignServiceImpl.java:65)
Caused by: java.io.IOException: ObjectIdentifier() -- data isn't an object ID (tag = 48)at sun.security.util.ObjectIdentifier.<init>(ObjectIdentifier.java:253)at sun.security.util.DerInputStream.getOID(DerInputStream.java:281)at com.sun.crypto.provider.PBES2Parameters.engineInit(PBES2Parameters.java:267)at java.security.AlgorithmParameters.init(AlgorithmParameters.java:293)at sun.security.pkcs12.PKCS12KeyStore.parseAlgParameters(PKCS12KeyStore.java:788)... 4 common frames omitted

3.1 坐标签署

Java代码如下:

@Override
public void signByXy() throws IOException {// 坐标签署Map<String, Object> signCert = getSignCert();PrivateKey pk0 = (PrivateKey) signCert.get("pk"

http://www.ppmy.cn/devtools/133490.html

相关文章

vue页签

效果&#xff1a; 快来学习&#xff1a; Vue 3 Composition API 和 script setup 语法 Composition API&#xff1a;Vue 3 引入的 Composition API 相比 Vue 2 的 Options API 提供了更灵活的代码组织方式。使用 setup 函数&#xff0c;可以将组件的所有功能和逻辑集中在一起&a…

蓝桥杯:编程爱好者的试炼场

引言 蓝桥杯全国软件和信息技术专业人才大赛&#xff08;简称 “蓝桥杯”&#xff09;是中国大陆地区一项重要的计算机编程与软件设计赛事&#xff0c;旨在为在校学生提供展示编程能力的平台&#xff0c;以促进信息技术人才的培养和软件开发产业的发展。从2010年首届比赛开始&…

从0开始学docker (每日更新 24-11-9)

使用none模式 将网络设置为none模式&#xff0c;容器将无法与外界通信&#xff0c;容器仍然有一个回环接口&#xff0c;不过没有外部流量的路由。这种模式可以启动没有任何网络设备的容器 使用 none 模式&#xff0c;Docker容器拥有自己的网络名称空间&#xff0c;但是并不会…

求一个3*3矩阵对角线元素之和

1.程序分析&#xff1a;利用双重for循环控制输入二维数组&#xff0c;再将a累加后输出。 2.程序源代码: 复制代码 代码如下&#xff1a; #include "stdio.h” #include ”conio.h" /&#xff0a; 如果使用的是TC系列编译器则可能需要添加下句 &#xff0a;/ st…

Intel AMT技术在服务器硬件监控中的应用与解读

随着信息技术的飞速发展&#xff0c;服务器硬件的稳定性和可靠性成为了企业运维团队关注的重点。为了实时监控服务器的各项性能指标&#xff0c;及时发现并解决潜在问题&#xff0c;各种监控技术应运而生。其中&#xff0c;Intel AMT&#xff08;主动管理技术&#xff09;以其独…

使用Visual Studio Code 快速新建Net项目

前言 最近&#xff0c;总是听大家说Visual Studio Code写后端代码非常好用&#xff0c;蓝后&#xff0c;就自己亲身体验了一下&#xff0c;还是很香的。 正文 1.首先需要安装Dotnet SDK&#xff0c;我这里安装的8.0版本&#xff0c;如下图&#xff1a; 2.安装完DotNet SDK&…

Maven学习——创建Maven的Java和Web工程,并运行在Tomcat上

一、Maven介绍 Maven 是一款为 Java 项目管理构建、依赖管理的工具&#xff08;软件&#xff09;&#xff0c;使用 Maven 可以自动化构建、测试、打包和发布项目&#xff0c;大大提高了开发效率和质量。 二、Maven安装步骤 1.下载后解压到没有空格、特殊字符和中文的目录中 2…

电子电气架构 -- 智能汽车电子电气架构开发关键技术

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧,都是来源于自己的想象,只有你真的去做了,才会发现有多快乐。…