前一段时间因为需要别人给的p12格式的安全证书才能获取相关数据,但是p12格式的证书无法导入到jdk的证书库,但是又需要在Java项目中使用p12格式的证书,找了很久,最后在别人的帮助下找到方法。

因为p12格式的证书包含证书和私钥,不能直接导入jdk的证书库,转换成cer格式的证书能导入,但是导出的cer格式证书不含私钥,这样仍不能使用证书。所以我找到的方法是先将导出的cer格式的证书导入jdk证书库中,再在Java项目中写一个工具类导入p12格式的证书。

用keytool将p12的证书导入到jdk的证书库具体步骤如下:

1.      先将p12格式的证书导入浏览器。

P12格式的证书导入,双击p12格式的证书,按照导入向导完成导入。

2.      再从浏览器中导出cer格式的证书。

在Internet选项中选择内容->证书->导出

导出为cer格式选择不要导出私钥,下一步默认第一个—DER编码二进制 X.509(.CER)(D),依次下一步完成。

3.      将导出的cer格式证书导入到jdk的证书库cacerts中。

打开命令行窗口,输入:keytool –import –file  cer格式证书路径 –keystore  jdk证书库路径 –alias 导入的别名。

执行import命令之后会提示输入密码,cacerts的默认密码为changeit

输入命令之后会提示是否信任这个证书?输入y就可以。

证书导入完成,再根据导入时的别名查看证书是否导入,

命令行输入:keytool –list –keystore  jdk证书库路径 |findstr /i 证书别名

输入keystore密码,也为默认的changeit

下面会显示你导入的证书和时间,这样就证明证书导入成功了。

4.      在Java程序中测试证书库的使用。

public class P12CertTest{

private final static String TEST_URL ="https://vtsis-szmsa0.mardep.gov.hk/szmsa/SzmsaVesselTripResponseServlet";

public void getHKVesselTrip() throws Exception {

KeyStoreclientStore = KeyStore.getInstance("PKCS12");

clientStore.load(new FileInputStream("D:/work_rg/jdk1.6.0_27/jdk1.6.0_27/jre/lib/security/szmsa.p12"),"12345678".toCharArray());

KeyManagerFactorykmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());

kmf.init(clientStore,"12345678".toCharArray());

KeyManager[]kms = kmf.getKeyManagers();

KeyStoretrustStore = KeyStore.getInstance("JKS");

trustStore.load(new FileInputStream("D:/work_rg/jdk1.6.0_27/jdk1.6.0_27/jre/lib/security/cacerts"),"changeit".toCharArray());

TrustManagerFactorytmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());

tmf.init(trustStore);

TrustManager[]tms = tmf.getTrustManagers();

SSLContextsslContext = null;

sslContext= SSLContext.getInstance("TLS");

sslContext.init(kms,tms, newSecureRandom());

HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

URLurl = newURL(TEST_URL);

HttpsURLConnectioncon = (HttpsURLConnection) url.openConnection();

con.connect();

InputStreaminputStream = con.getInputStream();

System.out.println(inputStream2String(inputStream));

inputStream.close();

con.disconnect();

}

public static String inputStream2String(InputStream is)throws IOException {

ByteArrayOutputStreambaos = newByteArrayOutputStream();

int i = -1;

while ((i = is.read()) != -1) {

baos.write(i);

}

returnbaos.toString();

}

public static void main(String[] args)throws Exception {

new P12CertTest().getHKVesselTrip();

}

}

删除证书,防止导入错误,备用。

java p12证书验证_p12格式的安全证书在Java项目中使用相关推荐

  1. HTML通过java信息保存,如何使用java邮件API将HTML格式的数据保存为java邮件的主体?...

    我需要将XML验证报告作为HTML内容邮件发送. 如何使用java邮件API将以下详细信息(从父类派生)作为HTML主体. //精确要求: 标题:CAR验证报告 //背景颜色:橙色 //字体颜色:黑色 ...

  2. java证书验证失败_解决https证书验证不通过的问题

    1.报错信息 java.security.cert.CertificateException: No name matching api.weibo.com found; nested excepti ...

  3. 翻译:通过Java编程创建X.509格式的数字签名证书

    本文翻译自此篇文章,如有余力可直接阅读原文. 我所需要解决的问题很简单:创建一个只需要配置很少字段的X.509协议的证书,再使用已有的CA私钥/证书进行签名,最后导出为PKCS12格式的签名证书.把这 ...

  4. python ssl连接 证书验证失败_python foursquare – SSL3证书验证失败

    我正在尝试使用Mike Lewis的 Python包装器( https://github.com/mLewisLogic/foursquare)向Foursquare API发出无用的请求: clie ...

  5. java design按钮_DesignJava 设计模式,讲述 的各种 方便在项目中进行 框架结构 Develop 238万源代码下载- www.pudn.com...

    文件名称: DesignJava下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 1675 KB 上传时间: 2013-11-21 下载次数: 2 提 供 者: 1 ...

  6. es java 模糊查询_java使用elasticsearch进行模糊查询-已在项目中实际应用

    java使用elasticsearch进行模糊查询 使用环境上篇文章本人已书写过,需要maven坐标,ES连接工具类的请看上一篇文章,以下是内容是笔者在真实项目中运用总结而产生,并写的是主要方法和思路 ...

  7. java https双向验证_java https双向认证证书

    // 双向认证证书 KeyStore keyStore = KeyStore.getInstance("PKCS12"); KeyStore trustStore = KeySto ...

  8. java证书验证失败_使用certbot证书验证失败

    这是我的情况 . 我在Debian Jessie上运行Apache服务器 . 我在那里有3个域,3个月前,我运行Certbot以使用此命令安装ssl证书 sudo certbot --authenti ...

  9. java 播放器开发 dat_dat格式用什么播放器 JAVA中文件的读写 I/O 输入输出流(3)

    OutputStreamWriter 和InputStreamReader都是包裹流 实例:如何将键盘输入的字符组成字符串直接赋给String对象. readLine()与回车符的问题: Print流 ...

最新文章

  1. 以太坊知识教程------账户
  2. [html] 如何实现多行文字梯形排版?
  3. TCPMP0.72RC1的编译与移植以及自己另外做UI完整方法
  4. ArcGIS栅格数据批量转换格式
  5. 黑白群晖为Plex添加证书,开启HTTPS访问
  6. GPS定位+经纬度定位
  7. win7中怎么显示文件名后缀
  8. CSU 1256 天朝的单行道
  9. oracle general ledger,处理 Oracle General Ledger 调整期间
  10. 开箱一款高精度智能手表,健康监测运动记录,你来评评是否值得
  11. 点仙人掌(cactus)
  12. mysql候选关键字_MySQL(三)之SQL语句分类、基本操作、三大范式
  13. silvaco 仿真BJT
  14. 谷歌中一些十分有趣的特效现象
  15. 什么是UML,UML类图
  16. Unix中sed用法
  17. 2014中国CRM与商业IT展览会(上交会专题)
  18. Win10自定义短语
  19. 蓝牙协议栈开发板 STM32F1 跑蓝牙协议栈 --传统蓝牙串口协议SPP演示以及实现原理
  20. Java中的集合---------Collections 类---集合的工具类 Comparator比较器

热门文章

  1. TP6(thinkphp6)队列与延时队列
  2. Appuploader的安装介绍
  3. oracle 中YYYY-MM-DD HH24:MI:SS的使用 和 HH24:MM:SS
  4. sci核心与中文核心哪个容易过
  5. 如何实现移动端富文本编辑器功能
  6. 化简分数,输入分子和分母,输出化简后的分子和分母。采用无脑迭代法;
  7. 专治懒癌100年,疗效嗷嗷好!
  8. 爱奇艺数据中台建设方案
  9. ABAQUS三维骨料随机分布脚本(三种粒子,水泥沙子石子)
  10. Python100days_Learning_DAY7