java读取X509拓展_java11教程--接口X509Extension用法

本文介绍了Java11中处理X509证书扩展的方法,详细讲解了X509Extension接口的使用,包括获取关键和非关键扩展的OID字符串集,并提供了代码示例展示如何从X509Certificate和X509CRL中提取扩展信息。
摘要由CSDN通过智能技术生成

X.509扩展的接口。

为X.509 v3 Certificates和v2 CRLs (证书撤销列表)定义的扩展提供了用于将其他属性与用户或公钥相关联,用于管理证书层次结构以及管理CRL分发的方法。 X.509扩展格式还允许社区定义私有扩展,以承载这些社区特有的信息。

证书/ CRL中的每个扩展可以被指定为关键或非关键。 证书/ CRL使用系统(验证证书/ CRL的应用程序)如果遇到无法识别的关键扩展,则必须拒绝证书/ CRL。 如果无法识别,则可以忽略非关键扩展。

ASN.1的定义是:

Extensions::=SEQUENCE SIZE (1..MAX) OF Extension

Extension::=SEQUENCE{

extnIdOBJECT IDENTIFIER,

criticalBOOLEAN DEFAULT FALSE,

extnValue OCTET STRING

-- contains a DER encoding of a value

-- of the type registered for use with

-- the extnId object identifier value

}

由于并非所有扩展都是已知的,因此getExtensionValue方法返回扩展值的DER编码的OCTET STRING(即extnValue )。

然后,这可以由了解扩展的类来处理。

获取由实现此接口的对象管理的证书/ CRL中标记为CRITICAL的扩展的OID字符串集。

获取由传入的

oid字符串标识的扩展值(

extnValue )的DER编码的OCTET字符串。

获取由实现此接口的对象管理的证书/ CRL中标记为NON-CRITICAL的扩展的OID字符串集。

检查是否存在不受支持的关键扩展。

检查是否存在不受支持的关键扩展。

获取由实现此接口的对象管理的证书/ CRL中标记为CRITICAL的扩展的OID字符串集。

以下是从X509Certificate获取一组关键扩展并打印OID的示例代码:

X509Certificate cert = null; try (InputStream inStrm = new FileInputStream("DER-encoded-Cert")) { CertificateFactory cf = CertificateFactory.getInstance("X.509"); cert = (X509Certificate)cf.generateCertificate(inStrm); } Set critSet = cert.getCriticalExtensionOIDs(); if (critSet != null && !critSet.isEmpty()) { System.out.println("Set of critical extensions:"); for (String oid : critSet) { System.out.println(oid); } }

获取由实现此接口的对象管理的证书/ CRL中标记为NON-CRITICAL的扩展的OID字符串集。

以下是从X509CRL撤销的证书条目中获取一组非关键扩展并打印OID的示例代码:

CertificateFactory cf = null; X509CRL crl = null; try (InputStream inStrm = new FileInputStream("DER-encoded-CRL")) { cf = CertificateFactory.getInstance("X.509"); crl = (X509CRL)cf.generateCRL(inStrm); } byte[] certData = ByteArrayInputStream bais = new ByteArrayInputStream(certData); X509Certificate cert = (X509Certificate)cf.generateCertificate(bais); X509CRLEntry badCert = crl.getRevokedCertificate(cert.getSerialNumber()); if (badCert != null) { Set nonCritSet = badCert.getNonCriticalExtensionOIDs(); if (nonCritSet != null) for (String oid : nonCritSet) { System.out.println(oid); } }

获取由传入的oid String标识的扩展值( extnValue )的DER编码的OCTET字符串。

oid字符串由一组以句点分隔的非负整数表示。

例如:

Examples of OIDs and extension namesOID (Object Identifier) Extension Name 2.5.29.14 SubjectKeyIdentifier 2.5.29.15 KeyUsage 2.5.29.16 PrivateKeyUsage 2.5.29.17 SubjectAlternativeName 2.5.29.18 IssuerAlternativeName 2.5.29.19 BasicConstraints 2.5.29.30 NameConstraints 2.5.29.33 PolicyMappings 2.5.29.35 AuthorityKeyIdentifier 2.5.29.36 PolicyConstraints

变量和类型

方法

描述

获取由实现此接口的对象管理的证书/ CRL中标记为CRITICAL的扩展的OID字符串集。

byte[]

获取由传入的

oid字符串标识的扩展值(

extnValue )的DER编码的OCTET字符串。

获取由实现此接口的对象管理的证书/ CRL中标记为NON-CRITICAL的扩展的OID字符串集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值