我们在开发或者使用SSL的过程中,非常多的软件须要我们提供java的keystore。特别是一些基于Java的中间件产品。

我们常规的做法是JDK自带的工具命令(keytool)去做。比方,以下的样例

keytool -import -v -alias EnTrust2048 -file D:\certs\EnTrust2048.cer -keystore D:\certs\test.jks

keytool -import -v -alias EntrustCertificationAuthorityL1C -file D:\certs\EntrustCertificationAuthorityL1C.cer -keystore D:\certs\test.jks

keytool -import -v -alias test.com -file D:\certs\Service-now.com.cer -keystore D:\certs\test.jks



可是这样的方式比較繁琐,如果我们一个目录以下有100个SSL的证书,那么我们就要输入100个类似于上面的命令。

如果是目录里面套目录

里面还有证书。就更麻烦。那么有没有好的办法呢? 笔者就跟大家分享一下怎样用java的程序代码去实现。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.KeyStore;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.List;
import javax.naming.ldap.LdapName;
import javax.naming.ldap.Rdn;
import javax.security.auth.x500.X500Principal; public class KeyStoreHelper {
public static void createTrustJKSKeyStore(final String originalTrustFolder,
final String jksTrustStoreLocation, final String password) {
File keyStoreFile = new File(jksTrustStoreLocation);
if (!keyStoreFile.exists()) {
try {
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(null, password.toCharArray());
File trustedFolder = new File(originalTrustFolder);
File[] certs = trustedFolder.listFiles();
if (certs != null) {
for (File cert : certs) {
CertificateFactory factory = CertificateFactory.getInstance("X.509");
try {
X509Certificate certificate = (X509Certificate) factory.generateCertificate(new FileInputStream(cert));
X500Principal principal = certificate.getSubjectX500Principal();
LdapName ldapDN = new LdapName(principal.getName());
List<Rdn> rdns = ldapDN.getRdns();
for (Rdn rdn : rdns) {
String type = rdn.getType();
if (type.equals("CN")) {
keystore.setCertificateEntry((String) rdn.getValue(),certificate);
break;
}
}
} catch (Exception ex) {
continue;
}
}
}
FileOutputStream fos = new FileOutputStream(jksTrustStoreLocation);
keystore.store(fos, password.toCharArray());
fos.close();
} catch (Exception exp) {
}
}
} /**
* @param args
*/
public static void main(String[] args) { KeyStoreHelper.createTrustJKSKeyStore("D:\\cacerts", "D:\\cacerts\\test.jks", "test123");
} }

上面这个Java类能够帮助我们做这个事情。

同一时候我们还能够把这个帮助方法开发一个可视化的程序,这样就更加方便,下图就是笔者自己开发的一个Eclipse Plugin插件

的界面设计。

怎样用Java代码来把SSL的证书自己主动导入到Java的秘钥存储文件(keystore)的更多相关文章

  1. 编辑距离及其动态规划算法(Java代码)

    编辑距离概念描述 编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.一般情况下编辑操作包括: 将一个字符替换成另一个字符: 插入一个字符: 删除一个字 ...

  2. java代码块的理解

    最近在复习java基础,在看到java代码块的时候,忽然发现自己貌似对于java代码块一无所知,于是赶紧对着一些资料实战演练了一把. 对于java代码块,不难根据名称看出其实就是一些java语句的集合 ...

  3. 使用非java代码编程

    使用非JAVA代码     JAVA语言及其标准API(应用程序编程接口)应付应用程序的编写已绰绰有余.但在某些情况下,还是必须使用非JAVA编码.例如,我们有时要访问操作系统的专用特性,与特殊的硬件 ...

  4. 算法笔记1 - 编辑距离及其动态规划算法(Java代码)

    转载请标注原链接:http://www.cnblogs.com/xczyd/p/3808035.html 编辑距离概念描述 编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个 ...

  5. JSP中的Java代码和内置对象

    一.JSP中的Java代码 (一)JSP页面中有三种方式嵌入java代码: 1.java的表达式 格式:<%= java表达式 %> 2.java的语句 格式:<% java语句&g ...

  6. 从Java代码到字节码(1)

    理解Java代码是如何被编译为字节码并在Java虚拟机(JVM)上执行是非常重要的,这将帮助理解你的程序是如何执行的.这样的理解不仅仅能够让你在逻辑上更好的掌握语言特性,而且能够有机会理解在做出重要决 ...

  7. Java代码输出到txt文件(申请专利贴源码的必备利器)

    最近公司在申请专利,编写不少文档,项目的代码量实在是过于庞大.如果一个一个的复制粘贴虽然能够完成,但是对于程序员而言实在没有这个必要.shell或者python就能解决这个问题.由于我个人对于shel ...

  8. WEB应用中普通java代码如何读取资源文件

    首先: 资源文件分两种:后缀.xml文件和.properties文件 .xml文件:当数据之间有联系时用.xml .properties文件:当数据之间没有联系时用.properties 正题:   ...

  9. 将MySQL一张表的数据迁移到MongoDB数据库的Java代码示例

    Java代码: package com.zifeiy.snowflake.handle.etl.mongodb; import java.sql.Connection; import java.sql ...

随机推荐

  1. ASP.NET中Literal,只增加纯粹的内容,不附加产生html代码

    页面代码 <div style="float: right; color: #666; line-height: 30px; margin-right: 12px;" id= ...

  2. (二)SpringMVC控制器

    第一节:@RequestMapping请求映射 第二节:@RequestParam请求参数 第三节:ModelAndView返回模型和视图 第四节:SpringMVC对象属性自动封装 第五节:Spri ...

  3. (最大矩阵链乘)Matrix-chain product

    Matrix-chain product. The following are some instances. a)       <3, 5, 2, 1,10> b)       < ...

  4. windows环境下的heap spray+stack pivot gadget 实现绕过dep

    ASLR+DEP是windows平台下最为常见的两种保护手段.这两种手段使得最基础的jmp esp等手法不再适用,而单纯的堆喷也会因为堆内存不可执行而失效.那么这里就来介绍一下heap spray+s ...

  5. 解决mysql不能远程登入的问题

    mysql远程不能登入,问题就在于当时设置的账号只限制本地访问,mysql默认也只是本地访问. 之前的设置: 通过命令行登录管理MySQL服务器(提示输入密码时直接回车): mysql> /us ...

  6. CSharp中的?.运算符

    在编译chromiumFX工程时候,编译失败,无法正常工作.是运算符 (?.)的错误,经过查找,该运算符 参考NULL 条件运算符(C# 和 Visual Basic) 用于在执行成员访问 (?.) ...

  7. caffe for python

    导言 本教程中,我们将会利用Caffe官方提供的深度模型——CaffeNet(该模型是基于Krizhevsky等人的模型的)来演示图像识别与分类.我们将分别用CPU和GPU来进行演示,并对比其性能.然 ...

  8. 20172304 实验二 《Java面向对象程序设计》 实验报告

    20172304 实验二 <Java面向对象程序设计> 实验报告 课程名称:<程序设计与数据结构> 学生班级:1723班 学生姓名:段志轩 学生学号:20172304 实验时间 ...

  9. 三种显著性检测算法(SR,HFT,GBMR)

    一.谱残差(Spectral Residual, SR)  一种简单的图像显著性计算模型 http://www.cnblogs.com/CCBB/archive/2011/05/19/2051442. ...

  10. JAVAEE——Solr:安装及配置、后台管理索引库、 使用SolrJ管理索引库、仿京东的电商搜索案例实现

    1 学习回顾 1. Lucene  是Apache开源的全文检索的工具包 创建索引 查询索引 2. 遇到问题? 文件名 及文件内容  顺序扫描法  全文检索 3. 什么是全文检索? 这种先创建索引 再 ...