点开一个证书链(证书) 详细信息中显示的指纹其实是最后一级证书的指纹。
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