历史版本24 :数字签名认证 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 版本编辑

报表服务器版本

JAR 包

10.02019-05-20

2. 原理编辑

数字签名是以电子的形式存在于数据信息中,或者是作为附件,或者是逻辑上与之有联系的数据,可用于辨别使用人的身份,保证数据的安全性。

目前的数字签名是建立在公共密钥体制基础上,它是公用密钥加密技术的另一类应用。

它的主要方式是:报文的发送方从报文文本中生成一个 128 位的散列值(或报文摘要)。

  • 发送方用自己的私人密钥对这个散列值进行加密来形成发送方的数字签名。这个数字签名将作为报文的附件和报文一起发送给报文的接收方。

  • 报文的接收方首先从接收到的原始报文中计算出 128 位的散列值(或报文摘要),再用发送方的公用密钥来对报文附加的数字签名进行解密。

  • 如果两个散列值相同、那么接收方就能确认该数字签名是发送方的。通过数字签名能够实现对原始报文的鉴别。

222

3. 描述编辑

3.1 应用场景

9.0 采用的方案是 RSA 的公私钥方案,该方案在跨平台支持不够好,所以 10.0 引入 JWT 方案,由于 JWT 是一个通用的规范,有很多语言版本能支持,并且校验起来更为简单,有使用方便、环境搭建更为容易的优点。

3.2 功能介绍

  • 数据决策平台里通过数字签名密钥和对模板进行认证。

  • 访问模板 /view/report?viewlet=***.cpt  的时候,需要在访问的 URL 的 QueryString 或者是请求头中,携带有认证服务器认证通过的签名,参数名为 fine_digital_signature,URL 格式为:/view/report?viewlet=GettingStarted.cpt&fine_digital_signature=值

  • 平台会根据签名来进行数字签名认证的判断,通过认证,显示模板,通不过认证,显示无权限。

4. 操作步骤编辑

4.1 获取 fine_digital_signature 值

获取对应的数字签名密钥的 fine_digital_signature 值,这里以 GettingStarted.cpt 模板为例:

import com.fr.cert.token.JwtBuilder;
import com.fr.cert.token.Jwts;
import com.fr.cert.token.SignatureAlgorithm;
import java.util.Date;

public class Test2 {

    public static void main(String[] args) {
        //数字签名有效时长 
        long validTime = 30 * 60 * 1000;
        //数字签名内容,以访问资源的相对路径作为内容 
        String path = "GettingStarted.cpt";
        String key = "123456"; //数字签名密钥,可以自定义
        //生成fine_digital_signature
        String fine_digital_signature = createJwt("", "", path, validTime, key);
        //输出fine_digital_signature
        System.out.println(fine_digital_signature);
    }

    private static String createJwt(String issuer, String id, String subject, long validTime, String key) {
        //用于生成数字签名,即参数fine_digital_signature的值
        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
        Date currentTime = new Date();
        Date expirationTime = new Date(currentTime.getTime() + validTime);
        JwtBuilder builder = Jwts.builder()
                .setIssuer(issuer)
                .setSubject(subject)
                .setIssuedAt(currentTime)
                .setExpiration(expirationTime)
                .setId(id)
                .signWith(signatureAlgorithm, key);
        return builder.compact();
    }
}


依赖于 fine-core-10.0.jar,以及 fine-third-10.0.jar 包,编译运行,得到 fine_digital_signature的值,如下图:

image.png


4.2 平台设置

管理员登录决策平台,点击管理系统>模板认证>数字签名密钥地址中,输入密钥值,如下所示:

image.png


4.3 效果预览

首先访问直接访问:http://localhost:8075/webroot/decision/view/report?viewlet=GettingStarted.cpt,提示没有权限;

在URL 后面新增参数:&fine_digital_signature=值,即可正常查看模板。

222


5. 注意事项

升级 2019-05-20之后的 JAR 时,之前使用官方文档生成的数字签名的 token 会失效,需要重新依赖新 JAR 生成fine_digital_signature