java 提取证书指纹
正文
用到的依赖
<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 提取证书指纹的更多相关文章
- java keytool证书工具使用小结
java keytool证书工具使用小结 在Security编程中,有几种典型的密码交换信息文件格式: DER-encoded certificate: .cer, .crt PEM-encod ...
- java keytool证书工具使用小结【转】
java keytool证书工具使用小结 keytool导入导出多条目对比 在Security编程中,有几种典型的密码交换信息文件格式: DER-encoded certificate: .cer, ...
- java keytool证书工具使用小结(转)
Keytool 是一个Java数据证书的管理工具 ,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:密钥实体(K ...
- java keytool证书工具使用小结(转载)
原文地址:http://www.micmiu.com/lang/java/keytool-start-guide/ Keytool 是一个Java数据证书的管理工具 ,Keytool将密钥(key)和 ...
- 记支付宝接口对接,涉及到提取证书SN号的解决方案
支付宝针对.NET SDK并未封装有提取证书SN序列号的方法,仅针对Java平台才有对应的方法(赤裸裸的歧视啊~~) 要想在提取这个SN序列号有两种方案: 1. 直接用Java SDK包来提取SN 2 ...
- Android 中获取 debug 测试 SHA1 和 release SHA1 证书指纹数据的方法
百度地图开发的时候要申请KEY,需要提供SHA1证书指纹数据 Eclipse eclipse中直接查看:windows -> preferance -> android -> bui ...
- Android Studio中获取sha1证书指纹数据的方法
高德地图开发申请KEY的时候需要开发者提供SHA1证书指纹数据,在eclipse很容易就找到了,但是Android Studio很久也没找到,只能使用在网上看到的方法了,在Android Studio ...
- java 提取目录下所有子目录的文件到指定位置
package folder; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundExcept ...
- Java提取URL某个参数的值
Java提取Url中某个参数的值. public static String getParam(String url, String name) { String params = url.subst ...
- Azure 经典模式中虚拟机证书指纹的生成和作用
用户在使用经典虚拟机时,经常会有如下疑问:门户主板页面中的 SSH/RDP 证书指纹这项信息是怎么来的?用途是什么?为什么有的时候为空?有没有对虚拟机使用有什么影响?以下我们进行一些基本的介绍: 证书 ...
随机推荐
- JS对Cookie的应用--JavaScript实例集锦(初学)
一个网站上的cookie信息可以实现下次自动登录,记录你的历史等等 可以在火狐浏览器查看本地代码的cookie信息: 打开火狐浏览器--点击右键--查看页面信息--安全--查看cookie <! ...
- next-route
在目录结构中,我们精心创建的每一个文件最终都会经过处理,转化为相应的页面路由.然而,值得注意的是,某些特殊文件格式在生成过程中并不会被当作路由路径来处理. app |-auth login page. ...
- Selenium4自动化测试8--控件获取数据--上传、下载、https和切换分页
10-上传 上传不能模拟用户在页面上选择本地文件,只能先把要上传的文件先准备好在代码里上传 import time from selenium.webdriver.support.select imp ...
- mogodb replication set复制集
replication set复制集 简要命令 replication set复制集 replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性. Replication se ...
- MySql类型转换函数cast
这两天处理一个现网的MySQL慢查询工单,学到了一个好用的MySQL函数:cast.事情是这样的: 我们有两张表 t_user 和 t_rule 表,需要关联这两张表去查询,关联字段是 t_user ...
- C# 【思路】分享 构造可进行单元测试的波形数据
需要单元测试自己写的识别特殊波峰的算法,所以必须构造波形数据. 一开始是自己在控件上手绘波形,虽然这种方便,但是能绘制的点太少,每次手画显得麻烦. 过后,又采用随机数构造波峰,这种虽说能构造很多点,产 ...
- Linux之SELinux
1.什么是SELinux? 安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统. SELi ...
- AI 画图真刺激,手把手教你如何用 ComfyUI 来画出刺激的图
目前 AI 绘画领域的产品非常多,比如 Midjourney.Dalle3.Stability AI 等等,这些产品大体上可以分为两类: 模型与产品深度融合:比如 Midjourney.Dalle3 ...
- ReplayKit2 采集音视频回调格式
一.音频 ReplayKit2 RPSampleBufferTypeAudioApp sampleBuffer = CMSampleBuffer 0x100500c50 retainCount: 1 ...
- 震惊!docker镜像还有这些知识你都知道吗
震惊!docker镜像还有这些知识你都知道吗? 镜像搜索 语法 [root@hmm docker-hello]# docker search -h Flag shorthand -h has been ...