java代码实现证书转换
.jks或者.keystore转换为.pem注意:此处主要借助于sh脚本进行转换新建shell脚本:前提: 需要配置好keytool、openssl命令证书转换路径:1、jks -> pkcs12 -> pem2、keystore -> pkcs12 -> pem注意:jks和keystore转换方式一致#!/usr/bin/env bashfunc...
·
.jks或者.keystore转换为.pem
注意:此处主要借助于sh脚本进行转换
新建shell脚本:
前提: 需要配置好keytool、openssl命令
证书转换路径:
1、jks -> pkcs12 -> pem
2、keystore -> pkcs12 -> pem
注意:jks和keystore转换方式一致
#!/usr/bin/env bash
function keystore_2_pem() {
srckeystore=$1
srckeystorename=${srckeystore##*/}
srcstorepass=$2
tmpdir=$(mktemp -d)
cp "$srckeystore" "$tmpdir"
cd "$tmpdir" || exit
keytool -importkeystore \
-srckeystore "$srckeystore" \
-destkeystore "$srckeystorename".pkcs12 \
-deststoretype pkcs12 \
-srcstorepass "${srcstorepass}" \
-deststorepass "${srcstorepass}"
openssl pkcs12 \
-in "$srckeystorename".pkcs12 \
-out "$srckeystorename".pem \
-passin pass:"${srcstorepass}" \
-passout pass:"${srcstorepass}"
cert_info=`cat "${srckeystorename}".pem`
echo "${cert_info}"
echo "###cert_info_end###"
dates=`openssl x509 -in "${srckeystorename}".pem -noout -dates`
echo "${dates}"
}
srckeystore=$1
srcstorepass=$2
keystore_2_pem "$srckeystore" "$srcstorepass"
注:
shell获取父目录:${srckeystore%/*}
shell获取文件名称:${srckeystore##*/}
转自:linux shell获取文件名和文件目录_shell 获取文件名_happy08god的博客-CSDN博客
创建Java工程:
后续会用到打包,所以此处引入 maven-assembly-plugin 打包工具,将依赖信息打包到一个jar中,方便后续java -jar 执行测试
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>
com.wd.ShellOpr // main方法类
</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
创建java类,执行脚本:
package com.wd;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.*;
public class ShellOpr {
private static final String CERT_INFO_END = "###cert_info_end###";
/**
* 证书中的日期格式
*/
private static final SimpleDateFormat CERT_DATE_FORMAT;
/**
* 目标日期格式
*/
private static final SimpleDateFormat TARGET_DATE_FORMAT;
static {
CERT_DATE_FORMAT = new SimpleDateFormat("MMM dd HH:mm:ss yyyy z", Locale.ENGLISH);
CERT_DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("GMT"));
TARGET_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z", Locale.ENGLISH);
TARGET_DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("GMT"));
}
public static void main(String[] args) throws Exception {
/*
sh 执行shell
cert_opr.sh 执行证书转换的脚本
/root/server.jks 待转换的证书路径
123456 证书密码
*/
String[] cmd = new String[]{"sh", "cert_opr.sh", "/root/server.jks", "123456"};
Process process = Runtime.getRuntime().exec(cmd);
StringBuilder certInfoStr = new StringBuilder();
List<String> certTimeList = new ArrayList<>();
try (InputStream inputStream = process.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader)){
String line;
boolean certEnd = false;
while ((line = bufferedReader.readLine()) != null) {
if (CERT_INFO_END.equals(line)) {
certEnd = true;
continue;
}
if (certEnd) {
certTimeList.add(line);
continue;
}
certInfoStr.append(line).append(System.lineSeparator());
}
}
System.out.println(certInfoStr);
System.out.println("<<=====================>>");
List<String> certTimeFormat = new ArrayList<>();
for (String certTime : certTimeList) {
String[] certTimeArr = certTime.split("=");
if (certTimeArr.length < 2) {
continue;
}
certTimeFormat.add(TARGET_DATE_FORMAT.format(CERT_DATE_FORMAT.parse(certTimeArr[1])));
}
System.out.println(certTimeFormat);
}
}
输出结果
更多推荐
已为社区贡献2条内容
所有评论(0)