Java获取X509证书里的指纹(SHA-1)从pxf文件里面
直接通过流去获取pxf后缀文件的内容,指纹通过X509才能获取。
String keyStorefile = "pfx文件地址";
String strPassword = "密码";
如果只需要获得pxf的公钥或者私钥
1 try {
2 FileInputStream fis = new FileInputStream("pxf文件地址");
3 //密码处理 strPassword=密码
4 char[] nPassword = null;
5 if ((strPassword == null) || strPassword.trim().equals("")){
6 nPassword = null;
7 } else {
8 nPassword = strPassword.toCharArray();
9 }
10 //加载读取PFX文件
11 KeyStore ks = KeyStore.getInstance("PKCS12");
12 ks.load(fis, nPassword);
13 fis.close();
14 Enumeration enumas = ks.aliases();
15 //从文件中获取秘钥
16 String keyPFXFile = null;
17 if (enumas.hasMoreElements()) {
18 keyPFXFile = (String)enumas.nextElement();
19 System.out.println("keyPFXFile////:"+keyPFXFile);
20 }
21 PrivateKey prikey = (PrivateKey) ks.getKey(keyPFXFile, nPassword);
22 Certificate cert = ks.getCertificate(keyPFXFile);
23 PublicKey pubkey = cert.getPublicKey();
24 System.out.println("cert class = " + cert.getClass().getName());
25 System.out.println("cert = " + cert);
26 System.out.println("public key = " + pubkey);
27 System.out.println("private key = " + prikey);
28 BASE64Encoder bse = new BASE64Encoder();
29 System.out.println("private encode = " + bse.encode(prikey.getEncoded()));
30 return prikey;
31 } catch (Exception e) {
32 e.printStackTrace();
33 }
34 return null;
如果要获得指纹
1 public static void main(String args[]){
2 String keyStorefile = "pfx地址";
3 String keyPassword = "密码";
4 //getPvkformPfx(keyStorefile,keyPassword);
5 try {
6 FileInputStream fis = new FileInputStream(keyStorefile);
7 //密码处理
8 char[] nPassword = null;
9 if ((keyPassword == null) || keyPassword.trim().equals("")){
10 nPassword = null;
11 } else {
12 nPassword = keyPassword.toCharArray();
13 }
14 //加载读取PFX文件
15 KeyStore ks = KeyStore.getInstance("PKCS12");
16 ks.load(fis, nPassword);
17 fis.close();
18 //从文件中获取秘钥
19 String keyPFXFile = null;
20 Enumeration enumas = ks.aliases();
21 if (enumas.hasMoreElements()) {
22 keyPFXFile = (String)enumas.nextElement();
23 }
24 X509Certificate x509Certificate = (X509Certificate)ks.getCertificate(keyPFXFile);
25
26 Principal principal = x509Certificate.getSubjectDN();
27 String str = principal.toString();
28 str = str.substring(str.indexOf("\"")+1);
29 str = str.substring(0,str.indexOf("\""));
30 System.out.println("账号:"+str);
31 String thumbprint = getThumbprint(x509Certificate);
32 System.out.println(thumbprint);
33 }catch (Exception e){
34 e.printStackTrace();
35 }
36 }
37 private static String getThumbprint(X509Certificate cert) {
38 try {
39 MessageDigest md = MessageDigest.getInstance("SHA-1");
40 byte[] der = cert.getEncoded();
41 md.update(der);
42 byte[] digest = md.digest();
43 String digestHex = DatatypeConverter.printHexBinary(digest);
44 return digestHex.toLowerCase();
45 }catch (Exception e){
46 e.printStackTrace();
47 }
48 return null;
49 }
FX本身不是证书,而是密钥库。
要获取证书,您必须将pfx加载到密钥库中,然后获取证书,再强转成X509Certificate去获得指纹。
注意:这个获得也不是直接获得,而是通过指纹的算法算出来指纹的参数,一般证书的信息里面会说明指纹的算法,如果没有说明,就是默认SHA-1。

Java获取X509证书里的指纹(SHA-1)从pxf文件里面的更多相关文章
- 通过OpenSSL解码X509证书文件
在Windows平台下.假设要解析一个X509证书文件,最直接的办法是使用微软的CryptoAPI. 可是在非Windows平台下,就仅仅能使用强大的开源跨平台库OpenSSL了.一个X509证书通过 ...
- 【WCF安全】使用X509证书自定义验证
接触WCF时间比较短,在项目中要使用X509证书,纠结好几天终于有了结论,因此为了方便日后查阅和园友交流特意单独将部分代码提出,并做以记录. 1.准备工作 制作X509证书,此处用到三个证书名称 导入 ...
- java获取https网站证书,附带调用https:webservice接口
一.java 获取https网站证书: 1.创建一个java工程,新建InstallCert类,将以下代码复制进去 package com; import java.io.BufferedReader ...
- MQTT研究之EMQ:【JAVA代码构建X509证书【续集】】
openssl创建私钥,获取公钥,创建证书都是比较简单的,就几个指令,很快就可以搞定,之所以说简单,是因为证书里面的基本参数配置不需要我们组装,只需要将命令行里面需要的几个参数配置进去即可.但是呢,用 ...
- MQTT研究之EMQ:【JAVA代码构建X509证书】
这篇帖子,不会过多解释X509证书的基础理论知识,也不会介绍太多SSL/TLS的基本信息,重点介绍如何用java实现SSL协议需要的X509规范的证书. 之前的博文,介绍过用openssl创建证书,并 ...
- Java 获取PDF数字签名证书信息
PDF文档中可添加数字签名,在添加签名前,需要准备可信任签名证书.对文档中已有的签名,可验证书签是否有效.也可通过一定方法来获取数字签名或者签名证书信息.下面以Java代码示例展示如何读取签名的证书信 ...
- x509证书相关内容
什么是证书 X.509证书,其核心是根据RFC 5280编码或数字签名的数字文档. 实际上,术语X.509证书通常指的是IETF的PKIX证书和X.509 v3证书标准的CRL 文件,即如RFC ...
- JAVA对数字证书的常用操作(转载)
一:需要包含的包 import java.security. * ; import java.io. * ; import java.util. * ; import java.security. * ...
- android获取https证书
最近碰到一个问题, 有朋友问android这边能不能拿到服务器下发的证书,意思就是 自签名证书的https接口,在请求的时候,也没有添加自签名证书进信任列表,直接去发https请求,按照正常htt ...
随机推荐
- Dotnet Core下的Channel, 你用了吗?
今天给大家分享一个微软官方的好东西:Channel. 前言 今天给大家分享一个微软官方的生产者/消费者方案的特性解决:Channel. Channel在System.Threading.Chann ...
- python下载三方库源地址修改
临时使用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package 默认使用 windows系统使用cmd快速设置 pi ...
- 解决 JPA 插入 MySQL 时间与实际时间差 13 个小时问题
问题描述 公司使用的阿里云数据库服务器,插入时间与实际时间差 13 个小时 执行 show variables like "%time_zone%"; 结果如下: Variable ...
- Java之选择排序(正序、逆序)
public class SelectSort { public static void main(String[] args) { /** * @author JadeXu * @// TODO: ...
- Python模块是否支持自定义属性使用双下划线开头和结尾?
我们知道在Python中,变量名类似__xxx__的,也就是以双下划线开头并且以双下划线结尾的变量和方法,是特殊变量,特殊变量是可以直接访问的,不是私有变量,所以,一般实例变量和类变量以及方法不能用_ ...
- Python使用import导入模块时执行了模块的文件但报ModuleNotFoundError错误的愚蠢问题
老猿在学习import导入自定义模块时,搜索路径中sys.path中已经添加对应路径,发现会报ModuleNotFoundError,但对应的模块代码被执行了,代码myfib.py如下: def fi ...
- .Net Core ABP应用如何在阿里云Linux Docker中开启Https
.Net Core应用开启Https本身就有很多种方式:1.代码配置2.环境变量3.反向代理 这里主要记录下阿里云的ECS,加阿里云免费的SSL证书,通过程序代码,如何进行配置. 首先从阿里云下载证书 ...
- P6100 [USACO19FEB]Painting the Barn G
本题解提供的做法思路应该是比较清晰的,可惜代码实现比较繁琐,仅供大家参考. 题解 不难发现 \(x\) ,\(y\) 的取值范围只有 \(200\) ,所以我们可以考虑从这里入手.我们可以先通过二维前 ...
- Oracle 迁移数据库到 mysql
一. oracle导出.sql文件(Navicat Premiu 11.0.8 无法实现oracle到mysql的数据传输亲测有效) exp username/pass@数据局地址ip:1521/ ...
- 基于menu小插件探索工程实践
目录 一.准备工作 1.C/C++环境搭建 2.VSCode的配置 (1) 安装插件: (2) 设置配置文件: 二.工程化编程实战 1.模块化设计 2.可重用设计:进一步抽象 menu的进一步优化 可 ...