java 导入pem文件_将PEM导入Java密钥库
胡子哥哥
在我的情况下,我有一个pem文件,其中包含两个证书和一个用于相互SSL身份验证的加密私钥。所以我的pem文件看起来像这样:-----BEGIN CERTIFICATE-----...-----END CERTIFICATE----------BEGIN RSA PRIVATE KEY-----Proc-Type: 4,ENCRYPTEDDEK-Info: DES-EDE3-CBC,C8BF220FC76AA5F9...-----END RSA PRIVATE KEY----------BEGIN CERTIFICATE-----...-----END CERTIFICATE-----这是我所做的将文件分为三个单独的文件,以便每个文件仅包含一个条目,---BEGIN..以---END..行开头和结尾。让我们假设我们现在有三个文件:cert1.pem,cert2.pem,和pkey.pem。pkey.pem使用openssl和以下语法转换为DER格式:openssl pkcs8 -topk8 -nocrypt-输入pkey.pem-通知PEM-输出pkey.der-输出DER请注意,如果私钥是加密的,则需要提供密码(从原始pem文件的供应商处获取)以转换为DER格式, openssl将要求您提供如下密码:“输入密码pkey.pem:”。如果转换成功,您将获得一个名为的新文件pkey.der。创建一个新的Java密钥库并导入私钥和证书:String keypass = "password"; // this is a new password, you need to come up with to protect your java key store fileString defaultalias = "importkey";KeyStore ks = KeyStore.getInstance("JKS", "SUN");// this section does not make much sense to me, // but I will leave it intact as this is how it was in the original example I found on internet: ks.load( null, keypass.toCharArray());ks.store( new FileOutputStream ( "mykeystore" ), keypass.toCharArray());ks.load( new FileInputStream ( "mykeystore" ), keypass.toCharArray());// end of section..// read the key file from disk and create a PrivateKeyFileInputStream fis = new FileInputStream("pkey.der");DataInputStream dis = new DataInputStream(fis);byte[] bytes = new byte[dis.available()];dis.readFully(bytes);ByteArrayInputStream bais = new ByteArrayInputStream(bytes);byte[] key = new byte[bais.available()];KeyFactory kf = KeyFactory.getInstance("RSA");bais.read(key, 0, bais.available());bais.close();PKCS8EncodedKeySpec keysp = new PKCS8EncodedKeySpec ( key );PrivateKey ff = kf.generatePrivate (keysp);// read the certificates from the files and load them into the key store:Collection col_crt1 = CertificateFactory.getInstance("X509").generateCertificates(new FileInputStream("cert1.pem"));Collection col_crt2 = CertificateFactory.getInstance("X509").generateCertificates(new FileInputStream("cert2.pem"));Certificate crt1 = (Certificate) col_crt1.iterator().next();Certificate crt2 = (Certificate) col_crt2.iterator().next();Certificate[] chain = new Certificate[] { crt1, crt2 };String alias1 = ((X509Certificate) crt1).getSubjectX500Principal().getName();String alias2 = ((X509Certificate) crt2).getSubjectX500Principal().getName();ks.setCertificateEntry(alias1, crt1);ks.setCertificateEntry(alias2, crt2);// store the private keyks.setKeyEntry(defaultalias, ff, keypass.toCharArray(), chain );// save the key store to a file ks.store(new FileOutputStream ( "mykeystore" ),keypass.toCharArray());(可选)验证新密钥库的内容:$ keytool -list -keystore mykeystore -storepass password密钥库类型:JKS密钥库提供者:SUN您的密钥库包含3个条目:cn = ...,ou = ...,o = ..,2014年9月2日,trustCertEntry,证书指纹(SHA1):2C:B8:...importkey,2014年9月2日,PrivateKeyEntry,证书指纹(SHA1):9C:B0:...cn = ...,o = ....,2014年9月2日,trustCertEntry,证书指纹(SHA1):83:63:...(可选)针对SSL服务器测试新密钥存储中的证书和私钥:(您可能希望将调试作为VM选项启用:-Djavax.net.debug = all) char[] passw = "password".toCharArray(); KeyStore ks = KeyStore.getInstance("JKS", "SUN"); ks.load(new FileInputStream ( "mykeystore" ), passw ); KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); kmf.init(ks, passw); TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(ks); TrustManager[] tm = tmf.getTrustManagers(); SSLContext sclx = SSLContext.getInstance("TLS"); sclx.init( kmf.getKeyManagers(), tm, null); SSLSocketFactory factory = sclx.getSocketFactory(); SSLSocket socket = (SSLSocket) factory.createSocket( "192.168.1.111", 443 ); socket.startHandshake(); //if no exceptions are thrown in the startHandshake method, then everything is fine..如果打算使用它,最后向HttpsURLConnection注册您的证书: char[] passw = "password".toCharArray(); KeyStore ks = KeyStore.getInstance("JKS", "SUN"); ks.load(new FileInputStream ( "mykeystore" ), passw ); KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); kmf.init(ks, passw); TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(ks); TrustManager[] tm = tmf.getTrustManagers(); SSLContext sclx = SSLContext.getInstance("TLS"); sclx.init( kmf.getKeyManagers(), tm, null); HostnameVerifier hv = new HostnameVerifier() { public boolean verify(String urlHostName, SSLSession session) { if (!urlHostName.equalsIgnoreCase(session.getPeerHost())) { System.out.println("Warning: URL host '" + urlHostName + "' is different to SSLSession host '" + session.getPeerHost() + "'."); } return true; } }; HttpsURLConnection.setDefaultSSLSocketFactory( sclx.getSocketFactory() ); HttpsURLConnection.setDefaultHostnameVerifier(hv);
java 导入pem文件_将PEM导入Java密钥库相关推荐
- 可视化mysql怎么导入sql文件_使用navicat导入sql文件的方法步骤
一.打开navicat,打开连接,右击连接名(如果新建连接,需要使用对应数据库的ip地址和密码,本机的是地址localhost,密码是自己mysql数据库的密码),选择新建数据库,数据库名要和想要导入 ...
- java编写布局文件_鸿蒙OS利用JAVA编写的布局实践练习
鸿蒙OS利用JAVA编写的布局实践练习 鸿蒙OS利用JAVA编写的布局实践练习 目录 JAVA UI框架 利用JAVA代码实现一个简单的布局 利用xml实现上述布局 JAVA UI框架 ??应用的Ab ...
- java读取csv文件_使用扫描仪读取Java中的CSV文件
java读取csv文件 We can use Java Scanner Class to read CSV File in java. 我们可以使用Java扫描程序类在Java中读取CSV文件. 读取 ...
- java 循环读取文件_您如何用Java连续读取文件?
小编典典 这有点旧,但是我已经使用了该机制,并且效果很好. 诀窍是使用java.io.RandomAccessFile和,并定期检查文件长度是否大于当前文件位置.如果是,则读取数据.当您达到长度时,您 ...
- java线程下载文件_使用多线程在Java下载文件
我正在做一个类似IDM的下载器,我已经读到了这篇关于它的文章.我已经实现了我的第一步代码. 下面是Downloader类的代码:package download.manager; import jav ...
- Java的class文件批量反编译成Java文件
Java的class文件批量反编译成java文件 Class文件是java文件编译后产生的一个文件,class文件便于在软件上运行,但是我们无法阅读中间的程序,所以我们需要将class文件转换成jav ...
- java pem 私钥_将PEM导入Java密钥库
在我的情况下,我有一个pem文件,其中包含两个证书和一个用于相互SSL身份验证的加密私钥.所以我的pem文件看起来像这样: -----BEGIN CERTIFICATE----- ... -----E ...
- java eclipse导入工程文件_如何在Eclipse软件中导入Java工程文件
有些在学习Java编程的用户虽然会创建工程,但是对于怎么导入工程文件却不清楚,下面这篇教程我们就来为大家介绍一下,在Eclipse软件中导入Java工程文件的方法,有兴趣的朋友就来了解一下吧. 解决方 ...
- mysql导入dat文件_从零开始学习 MySQL 系列--索引、视图、导入和导出
前言 上篇文章我们学习了数据库和数据表操作语句,今天我们学习下数据库索引,视图,导入和导出的知识. 作为基础篇,不会涉及到关于索引和视图的高级应用和核心概念,但是基本操作大家会了解,尤其是关于索引的内 ...
- excel通过js导入到页面_基于Excel和Java自动化工作流程:发票生成器示例
对于销售人员,使用Excel创建发票是很常见的.但是该过程通常涉及许多容易出错的手动操作,例如输入数据,复制/粘贴等.如何实现一个可以将数据从数据库自动填充到发票Excel模板中,而无需再辛苦手动输入 ...
最新文章
- JDBF读取DBF文件
- 解决J2EE系统应用性能问题常用方法
- SAP复合角色更改后扩展到派生节点
- 31.水平居中总结-不定宽块状元素方法(三)
- Codeforces 821C - Okabe and Boxes
- Visual Studio 2008 C++添加 链接库
- Spring Boot 2.0.0.M7 生产环境部署
- 简述java中异常_柴涛666 的日志-简述java中处理异常的两种方式。
- 武汉群硕面试心得体会(上)
- 变量和算术运算之变量(三)
- windows 一些恶搞的bat小脚本
- 4G标准LTE成争执焦点 中兴华为或以和解收场
- 智能配送与货物跟踪图
- Fiddler抓取Chrome最新版HTTPS设置
- Python爬取百度图片|我们都爱的ins小姐姐头像
- 遍历文件夹将dicom文件转换为nifty文件
- 百度云不限速破解详细教程附工具
- B. Wilbur and Array
- libpng16.so.16错误
- MAC PS用图片一个区域的颜色替换另一地方