正文


用到的依赖

<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.70</version>
</dependency>
// 从字符串生成证书对象
// 证书必须以 "-----BEGIN CERTIFICATE-----" 开头,以 "-----END CERTIFICATE-----" 结尾。
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream in = new ByteArrayInputStream(cert.getBytes());
X509Certificate cert = (X509Certificate) cf.generateCertificate(in); // 证书指纹 -1
// getEncoded 返回的是完整的证书编码,包括了证书的元数据和签名信息,适合用于将证书进行持久化存储或者在网络上传输
String certthumbprint1 = getThumbprint(cert.getEncoded(), "SHA-1");
// 证书指纹 -2
// getTBSCertificate 返回的是证书的原始信息,不包括数字签名,适合用于检查证书的内容和属性
String certthumbprint2 = getThumbprint(cert.getTBSCertificate(), "SHA-1"); // 公钥指纹
PublicKey publicKey = cert.getPublicKey();
String publickeythumbprint = getThumbprint(publicKey.getEncoded(), "SHA-1"); // 主体秘钥标识符 SubjectKeyIdentifier
// 详细作用见:https://blog.csdn.net/a82514921/article/details/104589443/
// SubjectKeyIdentifier 在证书的扩展部分,需要使用下面的方法提取,subjectKeyIdentifierExt 直接取出来的还需要做一下处理
byte[] subjectKeyIdentifierExt = cert.getExtensionValue(Extension.subjectKeyIdentifier.getId());
// SN1OctetString 类的具体作用是对 OCTET STRING 类型数据进行封装和处理,提供了一系列方法来操作 OCTET STRING 数据,例如获取数据的字节数组、比较两个 OCTET STRING 是否相等等操作。
// 在证书处理和加密算法中,经常会涉及到对 ASN.1 编码的数据进行解析和处理,ASN1OctetString 类就提供了对 OCTET STRING 数据进行操作的便利接口。
// 更具体的作用还需要研究 ASN.1
ASN1OctetString octetString = ASN1OctetString.getInstance(subjectKeyIdentifierExt);
SubjectKeyIdentifier subjectKeyIdentifier = SubjectKeyIdentifier.getInstance(octetString.getOctets());
String dnQualifier = Base64.getEncoder().encodeToString(subjectKeyIdentifier.getKeyIdentifier()); // 获取Base64格式化的指纹
public static String getThumbprint(byte[] input, String algorithm) {
try {
List<String> algorithmList = Arrays.asList("SHA-1", "SHA-256", "MD5");
if(StringUtils.isEmpty(algorithm)){
// 默认 SHA-1
algorithm = "SHA-1";
}else{
if(!algorithmList.contains(algorithm)){
// 算法不支持
return null;
}
}
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update(input);
byte[] digest = md.digest();
String thumbPrint = Base64.getEncoder().encodeToString(digest);
return thumbPrint;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

参考


[1]. chatgpt3.5

[2]. openssl对SSL证书及密钥操作说明

java 提取证书指纹的更多相关文章

  1. java keytool证书工具使用小结

    java keytool证书工具使用小结 在Security编程中,有几种典型的密码交换信息文件格式: DER-encoded certificate: .cer, .crt    PEM-encod ...

  2. java keytool证书工具使用小结【转】

    java keytool证书工具使用小结 keytool导入导出多条目对比 在Security编程中,有几种典型的密码交换信息文件格式: DER-encoded certificate: .cer, ...

  3. java keytool证书工具使用小结(转)

    Keytool 是一个Java数据证书的管理工具 ,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:密钥实体(K ...

  4. java keytool证书工具使用小结(转载)

    原文地址:http://www.micmiu.com/lang/java/keytool-start-guide/ Keytool 是一个Java数据证书的管理工具 ,Keytool将密钥(key)和 ...

  5. 记支付宝接口对接,涉及到提取证书SN号的解决方案

    支付宝针对.NET SDK并未封装有提取证书SN序列号的方法,仅针对Java平台才有对应的方法(赤裸裸的歧视啊~~) 要想在提取这个SN序列号有两种方案: 1. 直接用Java SDK包来提取SN 2 ...

  6. Android 中获取 debug 测试 SHA1 和 release SHA1 证书指纹数据的方法

    百度地图开发的时候要申请KEY,需要提供SHA1证书指纹数据 Eclipse eclipse中直接查看:windows -> preferance -> android -> bui ...

  7. Android Studio中获取sha1证书指纹数据的方法

    高德地图开发申请KEY的时候需要开发者提供SHA1证书指纹数据,在eclipse很容易就找到了,但是Android Studio很久也没找到,只能使用在网上看到的方法了,在Android Studio ...

  8. java 提取目录下所有子目录的文件到指定位置

    package folder; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundExcept ...

  9. Java提取URL某个参数的值

    Java提取Url中某个参数的值. public static String getParam(String url, String name) { String params = url.subst ...

  10. Azure 经典模式中虚拟机证书指纹的生成和作用

    用户在使用经典虚拟机时,经常会有如下疑问:门户主板页面中的 SSH/RDP 证书指纹这项信息是怎么来的?用途是什么?为什么有的时候为空?有没有对虚拟机使用有什么影响?以下我们进行一些基本的介绍: 证书 ...

随机推荐

  1. 07. rails 创建user模型

    rails帮助命令 rails -h 创建user模型 命令行 haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/ruby/circle ...

  2. element Tree 树形控件

    文档地址 https://element.eleme.cn/#/zh-CN/component/tree 代码地址 https://gitee.com/wBekvam/vue-shop-admin/b ...

  3. IceRPC之调用管道Invocation pipeline与传出请求Outgoing request->快乐的RPC

    作者引言 .Net 8.0 下的新RPC 很高兴啊,我们来到了IceRPC之调用管道 Invocation pipeline与传出请求 Outgoing request->快乐的RPC, 基础引 ...

  4. hutool QrCodeUtil解析二维码出现NotFoundException

    解析部分二维码时出现com.google.zxing.NotFoundException:null,解析失败的二维码手机扫是能正常打开的,后面发现这个问题是因为原二维码图片太大了,将图片缩小后正常解析 ...

  5. Python:conda install 和pip install的区别

    pip是个安装包的软件,conda是个环境管理的工具.conda能够安装多个python解释器,pip不行.因此conda在实际开发中是主要用来隔离不同的python版本和Tensorflow& ...

  6. Base64 java图片工具类

    import org.springframework.util.Assert; import javax.imageio.ImageIO; import java.awt.image.Buffered ...

  7. ES集群的扩缩容

    ES集群节点的扩容缩容案例 1.在集群中添加和删除节点 当您启动Elasticsearch实例时,您正在启动一个节点.Elasticsearch集群是一组具有相同cluster.name属性的节点.当 ...

  8. 鸿蒙HarmonyOS实战-Stage模型(卡片数据交互)

    一.卡片数据交互 HarmonyOS卡片数据交互是指在基于鸿蒙操作系统的设备上,卡片界面之间进行数据的传输和交互. HarmonyOS的卡片是一种轻量级的应用界面,可以在设备的屏幕上显示信息和提供操作 ...

  9. uniapp android端和ios端铃声静音,但是还是会震动

    uniapp 使用了html5plus的api,可以实现调用原生的api功能,htm5plus官方api文档: https://www.html5plus.org/doc/zh_cn/ios.html ...

  10. 图解JDK7及其早期版本HashMap扩容死锁问题

    在JDK7及其早期版本中HashMap在多线程环境下会发生扩容死锁的问题. HashMap中在创建时默认会有16个桶,有一个默认加载因子0.75,如果Map中的Entry数量达到阈值(16*0.75) ...