胡子哥哥

在我的情况下,我有一个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密钥库相关推荐

  1. 可视化mysql怎么导入sql文件_使用navicat导入sql文件的方法步骤

    一.打开navicat,打开连接,右击连接名(如果新建连接,需要使用对应数据库的ip地址和密码,本机的是地址localhost,密码是自己mysql数据库的密码),选择新建数据库,数据库名要和想要导入 ...

  2. java编写布局文件_鸿蒙OS利用JAVA编写的布局实践练习

    鸿蒙OS利用JAVA编写的布局实践练习 鸿蒙OS利用JAVA编写的布局实践练习 目录 JAVA UI框架 利用JAVA代码实现一个简单的布局 利用xml实现上述布局 JAVA UI框架 ??应用的Ab ...

  3. java读取csv文件_使用扫描仪读取Java中的CSV文件

    java读取csv文件 We can use Java Scanner Class to read CSV File in java. 我们可以使用Java扫描程序类在Java中读取CSV文件. 读取 ...

  4. java 循环读取文件_您如何用Java连续读取文件?

    小编典典 这有点旧,但是我已经使用了该机制,并且效果很好. 诀窍是使用java.io.RandomAccessFile和,并定期检查文件长度是否大于当前文件位置.如果是,则读取数据.当您达到长度时,您 ...

  5. java线程下载文件_使用多线程在Java下载文件

    我正在做一个类似IDM的下载器,我已经读到了这篇关于它的文章.我已经实现了我的第一步代码. 下面是Downloader类的代码:package download.manager; import jav ...

  6. Java的class文件批量反编译成Java文件

    Java的class文件批量反编译成java文件 Class文件是java文件编译后产生的一个文件,class文件便于在软件上运行,但是我们无法阅读中间的程序,所以我们需要将class文件转换成jav ...

  7. java pem 私钥_将PEM导入Java密钥库

    在我的情况下,我有一个pem文件,其中包含两个证书和一个用于相互SSL身份验证的加密私钥.所以我的pem文件看起来像这样: -----BEGIN CERTIFICATE----- ... -----E ...

  8. java eclipse导入工程文件_如何在Eclipse软件中导入Java工程文件

    有些在学习Java编程的用户虽然会创建工程,但是对于怎么导入工程文件却不清楚,下面这篇教程我们就来为大家介绍一下,在Eclipse软件中导入Java工程文件的方法,有兴趣的朋友就来了解一下吧. 解决方 ...

  9. mysql导入dat文件_从零开始学习 MySQL 系列--索引、视图、导入和导出

    前言 上篇文章我们学习了数据库和数据表操作语句,今天我们学习下数据库索引,视图,导入和导出的知识. 作为基础篇,不会涉及到关于索引和视图的高级应用和核心概念,但是基本操作大家会了解,尤其是关于索引的内 ...

  10. excel通过js导入到页面_基于Excel和Java自动化工作流程:发票生成器示例

    对于销售人员,使用Excel创建发票是很常见的.但是该过程通常涉及许多容易出错的手动操作,例如输入数据,复制/粘贴等.如何实现一个可以将数据从数据库自动填充到发票Excel模板中,而无需再辛苦手动输入 ...

最新文章

  1. JDBF读取DBF文件
  2. 解决J2EE系统应用性能问题常用方法
  3. SAP复合角色更改后扩展到派生节点
  4. 31.水平居中总结-不定宽块状元素方法(三)
  5. Codeforces 821C - Okabe and Boxes
  6. Visual Studio 2008 C++添加 链接库
  7. Spring Boot 2.0.0.M7 生产环境部署
  8. 简述java中异常_柴涛666 的日志-简述java中处理异常的两种方式。
  9. 武汉群硕面试心得体会(上)
  10. 变量和算术运算之变量(三)
  11. windows 一些恶搞的bat小脚本
  12. 4G标准LTE成争执焦点 中兴华为或以和解收场
  13. 智能配送与货物跟踪图
  14. Fiddler抓取Chrome最新版HTTPS设置
  15. Python爬取百度图片|我们都爱的ins小姐姐头像
  16. 遍历文件夹将dicom文件转换为nifty文件
  17. 百度云不限速破解详细教程附工具
  18. B. Wilbur and Array
  19. libpng16.so.16错误
  20. MAC PS用图片一个区域的颜色替换另一地方

热门文章

  1. MySql中增加一列
  2. 从传统外企到阿里 P9,这位 Java 工程师经历了什么?
  3. 官方纯净Win10下载安装激活
  4. 某享瘦app登录逆向
  5. day 83 Vue学习三之vue组件
  6. 利用HTML自制鬼灭之刃动态壁纸
  7. 电脑的Mac地址怎么查看
  8. (转载)C# Dictionary
  9. 异常:No persister for的解决办法
  10. u-boot2020.04移植(3、lowlevel_init.S)