jks证书处理

需要先将jks证书转为pem在进行导入

1.查询jks证书别名

keytool -list -keystore ***.jks

其中alias-cert为证书别名

2.导出pem证书

keytool -exportcert -alias <别名> -keystore ***.jks -rfc -file ***.pem

3.到jar目录下完成证书导入

cd $JAVA_HOME/jre/lib/security/
# 导入证书 密码默认为 changeit
keytool -import -alias <别名> -file ***.pem -keystore cacerts
# 查看证书库中的证书
keytool -list -keystore cacerts

证书库替换法

可以直接将jks证书改名为cacerts 替换 $JAVA_HOME/jre/lib/security/下的 cacerts

!注意

需要注意执行时候的keytool是否与当前版本jdk一致,最好执行的keytool从当前要改的jdk路径获取,否则可能出现以下两个问题;

高版本keytool 访问低版本cacerts keytool error: gnu.javax.crypto.keyring.MalformedKeyringException: incorrect magic

低版本keytool 访问高版本cacerts keytool error: java.io.IOException: Invalid keystore format

cacerts密码为空处理

如果cacerts的密码不巧是null 或者"" 则可能陷入死循环中

修改密码会要求输入密码,所以实际上无法进行密码输入

目前发现一种解决办法是通过java代码对证书库密码进行调整

附 java1.6可用的版本代码


import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.util.logging.Level;
import java.util.logging.Logger;public class TrustStorePasswordChanger {private static final String CACERTIFICATES_PATH = "/lib/security/cacerts";private static final String DEFAULT_CACERTIFICATES_PASSWORD = null;private static final String NEW_CACERTIFICATES_PASSWORD = "changeit";private static final String TRUST_STORE_FILE_PATH =System.getProperty("java.home")+ CACERTIFICATES_PATH.replace('/', File.separatorChar);private static final String OUTPUT_FILE_PATH = TRUST_STORE_FILE_PATH;/*** Main method for entry point.** @param args*/public static void main(String[] args) {InputStream fileInputStream =getInputStreamFromFilePath(TRUST_STORE_FILE_PATH);byte[] keyBytes;try {keyBytes = updateTrustStorePass(fileInputStream,DEFAULT_CACERTIFICATES_PASSWORD,NEW_CACERTIFICATES_PASSWORD);ByteArrayInputStream byteArrayInputStream =new ByteArrayInputStream(keyBytes);System.out.println(OUTPUT_FILE_PATH + File.pathSeparator);FileOutputStream output = new FileOutputStream(new File(OUTPUT_FILE_PATH + File.pathSeparator + "cards"));int in = byteArrayInputStream.read();while (in != -1) {output.write(in);in = byteArrayInputStream.read();}} catch (FileNotFoundException e) {Logger.getLogger(TrustStorePasswordChanger.class.getName()).log(Level.WARNING, null, e);} catch (IOException e) {Logger.getLogger(TrustStorePasswordChanger.class.getName()).log(Level.WARNING, null, e);System.out.println("Expected java.security.UnrecoverableKeyException:"+ " Password verification failed.");}}/*** This method takes cacerts input and updates trustore password** @param oldPassword* @param newPassword* @return trust store object in bytes * @throws Exception*/private static byte[] updateTrustStorePass(InputStream certificateInputStream,String oldPassword,String newPassword) throws FileNotFoundException {byte[] trustStore = new byte[1024];KeyStore inboundCertificate;try {inboundCertificate = KeyStore.getInstance(KeyStore.getDefaultType());char[] oldPasswordPhrase = null;if(oldPassword != null){oldPasswordPhrase = oldPassword.toCharArray();}char[] newPasswordhrase = newPassword.toCharArray();//主要是这一句,需要调整,因为代码可能是空字符串 也可能是nullinboundCertificate.load(certificateInputStream, oldPasswordPhrase);ByteArrayOutputStream byteArrayOutputStream =new ByteArrayOutputStream(inboundCertificate.size());inboundCertificate.store(byteArrayOutputStream, newPasswordhrase);trustStore = byteArrayOutputStream.toByteArray();} catch (KeyStoreException e) {Logger.getLogger(TrustStorePasswordChanger.class.getName()).log(Level.WARNING, null, e);} catch (CertificateException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);} catch (NoSuchAlgorithmException e) {throw new RuntimeException(e);}return trustStore;}private static InputStream getInputStreamFromFilePath(String filePath) {InputStream trustStoreInputStream = null;try {trustStoreInputStream = new FileInputStream(new File(filePath));} catch (FileNotFoundException e) {Logger.getLogger(TrustStorePasswordChanger.class.getName()).log(Level.WARNING, null, e);}return trustStoreInputStream;}}

可以参考

jre运行环境jks证书导入相关推荐

  1. java 8 jre_Java 8——JAVA jre运行环境

    Java 8 for Mac是功能强大的JAVA jre运行环境.Java是全世界目前使用最为广泛的编程语言,同时拥有全球最大的开发者专业社群.在全球云计算和移动互联网的产业环境下,Java更具备了显 ...

  2. 安装jre运行环境_如何下载安装java运行环境jre

    如果你只需要运行Java程序或Applet,下载并安装它即可.如果你要自行开发Java软件,请下载JDK.在JDK中附带有JRE.注意由于Microsoft对Java的支持不完全,请不. . Java ...

  3. linux下卸载自带jdk,重新安装jre运行环境

    jre下载:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html 文件名: ...

  4. linux java jre下载_linux下安装jre运行环境

    上官网下载安装文件:点击打开链接 文件名:jre-8u65-linux-x64.gz 安装步骤 1.解压tar -xzvf jre-8u65-linux-x64.gz 2.将解压后的文件放到/usr/ ...

  5. 使用jlink精简一个jre运行环境

    首先需要有jdk9或者10,切换到jdk的安装目录 写个bat内容如下: bin\jlink --module-path .\jmods --add-modules java.naming,java. ...

  6. idea 使用exe4j生成exe文件并且附带jre运行环境(亲测有效)

    转载地址: https://blog.csdn.net/qq_40794266/article/details/88691936

  7. 【关于Citespace和JRE(JAVA运行环境)的详细安装教程】

    关于Citespace和JRE(JAVA运行环境)的详细安装教程 想要运行Citespace, 先搭建JRE运行环境 1. JRE运行环境 1.Java中JDK包含JRE(即占内存更多),若只用Cit ...

  8. MyEclipse中运行环境jre、编译级别、tomcat运行环境区别

    运行环境JRE SYSTEM LIARARY引入项目中依赖的jdk基础包,在java build path -->library中可以切换 编译级别是项目编译成.class时使用的编译jdk版本 ...

  9. java虚拟机MyEclipse_Eclipse和MyEclipse运行环境java虚拟机jvm设置,自己设置jre

    Eclipse运行环境java虚拟机jvm设置,自己设置jre 浅谈Eclipse寻找JVM(JRE)的顺序机制 Eclipse也是一个普通的Java程序,因此必须有一个JRE做为运行环境. 如果你的 ...

最新文章

  1. K-最近邻法(KNN)简介
  2. 【响应式Web前端设计】HTML DOM padding 属性
  3. python简单程序代码-简单python代码
  4. 【Android游戏开发十八】解放手指,利用传感器开发游戏!
  5. Java中常见数据结构Map之LinkedHashMap
  6. Python3.5以上版本lxml导入etree报错Unresolved reference
  7. 利用percona-toolkit工具检查MySQL数据库主从复制数据的一致性,以及修复。
  8. c语言跳至表域跳几个字符,c语言学习最好资料.doc
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的图书馆座位预约系统
  10. android布局性能,Android开发——布局性能优化的一些技巧(一)
  11. 软件测试:Lab 2 Selenium
  12. 5.PB中调用存储过程
  13. Eigen教程3----矩阵、向量以及标量的运算,转置、共轭以及伴随矩阵
  14. USB转多串口设备固定串口号
  15. 如何利用github打造博客专属域名
  16. 【基础知识】HTML5 Canvas小项目时钟的简单实现(图文、演示)
  17. Tesseract-OCR的使用---提取图片中的文字(OneNote)
  18. JSP WAP 网站开发
  19. excel单元格内容拆分_EXCEL单元格里提取、删除或替换部分内容
  20. 属相婚配php,属兔的属相婚配表_属兔的最佳属相婚配

热门文章

  1. stream、lamda、optional
  2. 深度学习入门之如何制作npz、npy文件
  3. FusionCharts--WEB图表技术
  4. vscode setting 配置
  5. 小外包公司的商业运作模式,希望大家多补充补充!
  6. 什么是linux手机软件?
  7. Fundamental of 4G LTE - 学习笔记(3)OFDMA/OFDM in 4G LTE (Part1)
  8. Quartz的12张数据库表说明
  9. python unicode转换
  10. OLE excel