java pkcs#11读取证书加解密(初学-分享)
java pkcs#11读取证书加解密(初学-分享)
插入USB-KEY, 想通过HttpClient来向服务器发送https请求。
一、httpClient只能够支持java证书文件,他提供的例子如下
如果USB-KEY的驱动程序支持PKCS#11接口,则OpenSSL通过engine可以比较方便地访问USB-KEY。
1 public static void main(String[] args) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException, UnrecoverableKeyException { 2 // 程序并为将私钥提取出来,只是调用了私钥的接口 3 String pkcs11config="name=PKCS11/n" + 4 "library=C://WINDOWS//system32//GP_IFD.dll"; 5 byte[] pkcs11configbytes=pkcs11config.getBytes(); 6 ByteArrayInputStream configStream = new ByteArrayInputStream(pkcs11configbytes); 7 8 Provider p = new sun.security.pkcs11.SunPKCS11(configStream); 9 Security.addProvider(p); 10 char[] pin = "password".toCharArray(); 11 KeyStore ks = KeyStore.getInstance("PKCS11"); 12 ks.load(null, pin); 13 System.out.println( ks ); 14 15 KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); 16 17 Enumeration enumeration = keyStore.aliases(); 18 while (enumeration.hasMoreElements()) { 19 String alias = (String) enumeration.nextElement(); 20 System.out.println("----alias---:"+alias); 21 X509Certificate certificate = (X509Certificate)keyStore.getCertificate(alias); 22 System.out.println("----certificate---:"+certificate); 23 PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, null); 24 System.out.println("----privateKey---:"+privateKey); 25 } 26 27 }
不晓得哪些厂商实现了这个接口,既然涉及到安全大家都没有那么友好了。我用下面这段代码来访问农行的KEY宝(厂商是华大),报错:
Exception in thread "main" java.security.ProviderException: Initialization failed at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:186) at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:80) at cn.com.hd.test.pkcs11.main(pkcs11.java:65) Caused by: java.io.IOException: ???????¨????ò??
at sun.security.pkcs11.wrapper.PKCS11.connect(Native Method) at sun.security.pkcs11.wrapper.PKCS11.<init>(PKCS11.java:125) at sun.security.pkcs11.wrapper.PKCS11.getInstance(PKCS11.java:138) at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:128) ... 2 more
应该根本就不支持这个接口吧
二、听说最新版本的OpenSSL 0.9.8i版本已经增WINDOWS CAPI的支持。有人进行测试:
进行对USB-KEY的试验(特别说明,试验用的USB-KEY是公安专用,所以第一次访问USB-KEY时会要求输入KEY的密码,并在公安内网中进行试验。)
1、用新编译的软件发起HTTPS页面请求,软件弹出公安KEY的密码输入窗口。(可以证明去访问了CAPI,并成功访问到该USB)。
2、输入密码后,返回的页面中带有USB-KEY主人的信息。(被证明USB-KEY支持成功)
3、拨出USB-KEY,再次请求该页面。返回的页面中不带任何人员信息,直接跳转到登录窗口。
4、再次插入(测试软件不重启),再次请求HTTPS,又出现密码输入窗口,输入密码后,成功访问页面,页面中并带有USB-KEY主人的信息。
5、再次请求该页面,没有出现密码输入窗口,页面返回正常,即同样带有USB-KEY主人的信息。
通过以上五步测试,证明新编译的OPENSSL0.9.8i版本可以自动的向CAPI进行调用。这给需要在OPENSSL中支持CAPI接口的开发者来说是一种福音,至少对我来说是,不用自己写代码,还要测试等等,呵呵。
这个版本好像只支持WINDOWS下的CAPI接口,LINUX下的不清楚了。就说到这里,本着OPENSSL开源的原则,我把我的测试经过供大家参考。以后如果有类似需求的朋友可以尝试一下。
通过调用OpenSSL 的BIO 库来建立安全连接和非安全连接具体方式可以参考:
http://www.ibm.com/developerworks/cn/linux/l-openssl.html
不过这些都是C的方式,本来想用httpClient提交请求的,难道就没有好java的方法了吗?
java pkcs#11读取证书加解密(初学-分享)相关推荐
- python openssl 证书加解密过程感觉是这样
python openssl 证书加解密过程感觉是这样 第一步 生成2048 bit的PEM格式的RSA Key:Key.pem openssl genrsa -out Key.pem -f4 204 ...
- JVM(Java SE 11版本)加载类和接口
本文介绍了Java虚拟机(Java SE 11版本)加载类和接口. 加载类和接口 加载是指查找具有特定名称的类或接口类型的二进制形式的过程.典型的做法是,查找事先由Java编译器从源代码计算而来二进制 ...
- java证书加解密过程
前提铺垫: 本机上构造两个数字证书用作测试,一个 Server 端 与一个Client 端 使用java keytool 生成自签名证书. 过程如下: 参数如下: -genkeypair 生成密钥对 ...
- 基于Java的SQL Server数据库加解密系统设计与实现
目 录 摘 要 1 ABSTRACT 2 第1章 绪论 3 1.1 数据库加解密系统开发背景 3 1.2 国内外现状 3 1.3 本文的主要工作 4 1.4 论文的组织结构 4 第2章 数据库加密的基 ...
- java C# objective-c AES对称加解密
1 /** 2 * AES加解密 3 */ 4 public class AESHelper { 5 final static String AES_KEY = "43hr8fhu34b58 ...
- Java 实现 RSA 非对称加密算法-加解密和签名验签
1. 非对称加密算法简介 非对称加密算法又称现代加密算法,是计算机通信安全的基石,保证了加密数据不会被破解.与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密(pr ...
- Java批量高效压缩支持加解密支持所有压缩格式(Zip/7z/rar)
前言:有时候需要对很多文件进行压缩,几个还好如果有100个呢对吧,为什么不借助咱们强大的java呢,所以我就写了一个可以批量压缩,支持所有压缩格式的工具类当然也支持加密和解密,下面就是工具类的代码 废 ...
- 【Bcrypt+AES】 Vue+Java前后端分离信息加解密详解和问题解决
文章目录 1.简单介绍Bcrypt[单向hash] 2.登录服务:使用Bcrypt加密和验证 2.1 Vue前端使用Bcrypt加密 2.2 SpringBoot后端使用Bcrypt验证密码 3.简单 ...
- encodingaeskey java,消息体签名与加解密-开发者QA
Q 为什么要上线消息加密功能? A 为了更好的保护用户和公众账号的信息安全. Q 接入消息加解密功能复杂吗? A 开发者接入消息加解密功能并不复杂,微信团队提供了5种语言的示例代码(包括C++.php ...
最新文章
- css 联系我们,CSS3 模态窗口联系我们表单模板
- 从商业视角理解数据:数据科学家的思维之路
- hdu1874 畅通工程续
- java 代码执行el,专属于java的漏洞——EL表达式注入
- mysql 设置大小写_mysql修改大小写参数注意事项
- TStringList 的Sorted属性
- 进入顶层社会的顺序是什么?
- 支持Visual Studio 2008和.NET 3.5的企业类库4.0
- HTTPS客户端验证服务器端的过程
- Visual Studio 6/2005/2008/2010 各版本编译器 下载
- Arduino智能小车——小车测速
- 【转帖】龙芯3A3000处理器深度评测:和Intel、AMD差距巨大
- P68是什么意思 IP67和IP68等级有什么区别
- PM如何写好产品需求文档
- 玩转 IDEA 系列教程——强烈推荐官方中文(汉化)插件!
- ChatGPT真的会取代程序员吗?
- SAP英语专栏:第1篇
- Unreal Engin_画廊制作笔记 _008灯光处理,夜晚的画廊灯光设置
- SEO高质量的伪原创怎么写?
- 网络主机防泄密安全保护方案
热门文章
- 哲学家就餐与死锁问题,死锁产生的条件以及解决方案
- 一天搞定HTML----常用标签01
- emwin修改text字体颜色_Rggplot2 绘制带颜色条的相关性散点图
- 通俗易懂:贪心算法(一):分配问题 (力扣455分发饼干 和135分发糖果)
- Python学习--环境搭建
- webpack从入门到精通(三)生产环境的基本配置
- MyEclipse创建JavaWeb应用和TomCat的配置
- android音频开发6,Android 音视频开发(一) : 通过三种方式绘制图片
- php获取excel表格内容,利用PHPExcel如何读取表格中内容
- 开源 Serverless 里程碑:Knative 1.0 来了