java调用shell脚本获取证书指纹

点开一个证书链(证书) 详细信息中显示的指纹其实是最后一级证书的指纹。

windows下cmd命令使用

cmd /c dir 是执行完dir命令后关闭命令窗口
cmd /k dir 是执行完dir命令后不关闭命令窗口
cmd /c start dir  会打开一个新窗口后执行dir命令,原窗口会关闭
cmd /k start dir  会打开一个新窗口后执行dir命令,原窗口不会关闭
cmd /?  查看帮助信息*

Java程序中执行脚本文件

 public String getFinger(String filepath) throws IOException, InterruptedException {
        log.info("======== filepath =======> {}", filepath);
        // 获取脚本文件执行的绝对路径
        String path = this.getClass().getClassLoader().getResource("script/fingerprint.sh").getPath();
        log.info("=== fingerprint.sh 文件路径 ====> {}", path);
        // linux
//        Process ps = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c",path+" "+filepath});
        // windows
        Process ps = Runtime.getRuntime().exec("cmd /c start" + path + " " + filepath);
        // 等待调用的命令执行完,可用来统计时间或控制程序同步执行
        int waitFor = ps.waitFor();
        log.info("========= waitFor =========>{}", waitFor);
        // 打印命令的错误信息 if is not empty
        String shellError = getMsgFromCmd(ps.getErrorStream());
        if (!StringUtils.isEmpty(shellError)) {
            log.info("==== 获取指纹时,执行脚本出错  ===> {}", shellError);
        }
        // 打印命令的输出信息
        String res = getMsgFromCmd(ps.getInputStream());
        log.info("<============== fingerprint shell output ==========================>");
        log.info(res);
        String finger = "";
        if (!StringUtils.isEmpty(res) && res.contains("=") && res.contains("-")) {
            finger = res.substring(res.indexOf("=") + 1, res.indexOf("-")).replace(":", "").toLowerCase();
        }
        return finger;
    }

    public static String getMsgFromCmd(InputStream inputStream) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
        StringBuffer sb = new StringBuffer();
        String line;
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }
        String result = sb.toString();
        return result;
    }

对应的Shell脚本文件

#!/bin/bash
openssl x509 -fingerprint -in $1 -inform PEM
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值