x509 java_Java X509证书解析和验证
我试图通过几个步骤处理X509证书,并遇到几个问题.我是新来的JCE,所以我不完全是最新的一切.
我们希望能够根据不同的编码(PEM,DER和PCKS7)来解析几个不同的X509证书.我使用FireFox(证书包括链)从PEC和PCKS7格式从https://belgium.be导出了相同的证书.我已经离开了几条线,这些问题不是必需的
public List parse(FileInputStream fis) {
/*
* Generate a X509 Certificate initialized with the data read from the inputstream.
* NOTE: Generation fails when using BufferedInputStream on PKCS7 certificates.
*/
List certificates = null;
log.debug("Parsing new certificate.");
certificates = (List) cf.generateCertificates(fis);
return certificates;
}
这个代码工作正常,因为我使用FileInputStream而不是PCKS7的BufferedInputStream,这是非常奇怪的,我认为?但我可以和它一起生活
下一步是验证这些证书链.
1)检查所有证书是否具有有效的日期(简单)
2)使用OCSP验证证书链(如果证书中没有找到OCSP URL,则返回CRL).这是我不完全确定如何处理这个问题.
我正在使用Sun JCE,但是似乎没有那么多的文档(在示例中)?
我首先做了一个简单的实现,只检查链,而不经过OCSP / CRL检查.
private Boolean validateChain(List certificates) {
PKIXParameters params;
CertPath certPath;
CertPathValidator certPathValidator;
Boolean valid = Boolean.FALSE;
params = new PKIXParameters(keyStore);
params.setRevocationEnabled(false);
certPath = cf.generateCertPath(certificates);
certPathValidator = CertPathValidator.getInstance("PKIX");
PKIXCertPathValidatorResult result = (PKIXCertPathValidatorResult)
certPathValidator.validate(certPath, params);
if(null != result) {
valid = Boolean.TRUE;
}
return valid;
}
这对我的PEM证书工作正常,但不是为了PCKS7证书(相同的证书,仅以其他格式导出).
java.security.cert.CertPathValidatorException:Path不链接任何信任锚.
我唯一可以看到的区别是,CertPath的形成顺序是不一样的?我不能弄清楚出了什么问题,所以我现在离开了,并继续使用PEM证书,但是我们可以称之为这个问题1)
之后我想实现的是OCSP检查.
显然,如果我启用OCSP使用:Security.setProperty(“ocsp.enable”,“true”);并设置params.setRevocationEnabled(true);
它应该能够自己找到OCSP URL,但似乎不是这样.什么标准实现应该做(问题2)?
java.security.cert.CertPathValidatorException:必须指定OCSP响应程序的位置
过去这一点,我发现了一种使用AuthorityInfoAccessExtension从证书中检索OCSP网址的方法.
但是在ocsp.url属性中手动设置OCSP网址后,我得到一个java.security.cert.CertPathValidatorException:OCSP响应错误:UNAUTHORIZED
似乎我错过了很多必要的步骤,而许多在线参考文献说,设置ocsp.enable属性应该是你需要做的所有事情?
也许你们中的任何一个人都不能指导我完成这个过程吗?告诉我我完全错误的地方:)
如果没有找到OCSP,下一步将实施CRL检查,如果有人可以指出任何示例或向我显示一些文档,这也将不胜感激!
谢谢!
编辑:
由于它不是自己拾取属性,所以我一直在尝试使用以下命令设置所有属性:
// Activate OCSP
Security.setProperty("ocsp.enable", "true");
// Activate CRLDP -- no idea what this is
Security.setProperty("com.sun.security.enableCRLDP", "true");
X509Certificate target = (X509Certificate) certPath.getCertificates().get(0);
Security.setProperty("ocsp.responderURL","http://ocsp.pki.belgium.be/");
Security.setProperty("ocsp.responderCertIssuerName", target.getIssuerX500Principal().getName());
Security.setProperty("ocsp.responderCertSubjectName", target.getSubjectX500Principal().getName());
Security.setProperty("ocsp.responderCertSerialNumber", target.getSerialNumber().toString(16));
哪一个例外:
java.security.cert.CertPathValidatorException:找不到响应者的证书(使用OCSP安全属性进行设置).
x509 java_Java X509证书解析和验证相关推荐
- 数字证书 X509详解 python解析SSL证书
数字证书 数字证书就是互联网通讯中标志通讯各方身份信息的一系列数据,提供了一种在Internet上验证您身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证.它是由一个由权威机构-----C ...
- gmssl编程之X509证书解析
gmssl编程之X509证书解析 引言 X509语法结构 基本项 证书版本号 证书序列号 证书颁发者 证书使用者 证书有效期 证书公钥 扩展项 基本约束 密钥用途 增强型密钥用途 颁发者标识 使用者标 ...
- golang x509包 数字证书相关介绍
在go语言提供的系统包中包含了大量和数字证书有关的方法.在这些方法中就有私钥生成的方法.私钥解析的方法.证书请求生成的方法.证书生成的方法等等.通过这些方法应该能够实现和openssl命令类似的功能. ...
- https原理:证书传递、验证和数据加密、解密过程解析 (转)
http://www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html 我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站 ...
- TLS/HTTPS 证书生成与验证
https://www.cnblogs.com/kyrios/p/tls-and-certificates.html 最近在研究基于ssl的传输加密,涉及到了key和证书相关的话题,走了不少弯路,现在 ...
- Hyperledger Fabric 1.0 实战开发系列 第⑤课 fabric 证书解析
通过cryptogen生成所有证书文件后,以peerOrgannizations的第一个组织树org1为例,每个目录和对应文件的功能如下: ca: 存放组织的根证书和对应的私钥文件,默认采用EC算法, ...
- AFNetworking框架下的SSL服务器证书的自定义验证
2019独角兽企业重金招聘Python工程师标准>>> # AFNetworking框架下的SSL服务器证书的自定义验证 ## 如何使用本地证书进行SSL验证 #### 开启SSL验 ...
- 代码整洁之道------它山之玉可以重构:身份证号码解析、验证工具(第一天)
首先感谢原作者的代码: < 面向对象的15位.18位中国大陆身份证号码解析.验证工具>. 如果有版权问题,敬请告知. 原代码给了我很好的起点,是的,这些代码都是玉,我在这只是再琢磨琢磨. ...
- Https的CA证书是如何验证其有效性的?
一.证书作用 证书验证的过程是使用非对称加密的,客户端对服务器端发起请求,服务器返回一个证书,客户端验证这个证书的合法性,如果这个证书是合法的,那么就生成一个随机值,利用这个随机值作为对称加密的钥匙 ...
- 如何为WCF应用添加X509证书和安全验证
一.首先用Visual Studio 命令提示创建证书 makecert -sr LocalMachine -ss My -a sha1 -n CN=Webabcd -sky exchange -pe ...
最新文章
- 数据库定时导出和互备一例
- select函数测试
- Lua开发学习4-普通循环和迭代器循环
- 杭州 3~5年 前端面经,高频面试题总结
- 程序员的相亲那件小事,指南献给您
- springboot 指定 logback_spring boot与日志
- PMP备考资料和备考经验分享(基于PMP第六版)
- OpenCV老版本下载方法
- 联想云计算机终端,联想智能云教室系统 V1.3.20.1109_C201105 最新官网版本
- 怎么修改打印机服务器权限,Win7怎么设置网络打印机管理权限?
- 计算机通信网络(二)路由基本概念及静态路由配置
- 戴尔服务器收集硬件日志的工具dest
- oracle18c静默安装教程,Oracle 18c 19c 安装的 DBT-50000 错误解决
- android业余手机开发,赚钱心得
- NOIP模拟赛 17.10.10
- 使用wireshark抓取聊天信息与爬虫入门
- 5.11 Go语言文本大数据处理(2):文件分割与入库
- 你想玩物联网开发板吗?和我一起学习啊
- 就业感言:纸上得来终觉浅,绝知此事要躬行
- Java 8 的发展