如何解决“DerValue.get OID,而不是OID”?

时间:2017-08-23 02:47:28

标签: java

我想创建一个带有证书策略扩展名的证书,并使用以下代码。

CertificatePolicyId certificatePolicyId2=new CertificatePolicyId(new DerValue("2.5.29.32.1"));    
PolicyInformation policyInformation2=new PolicyInformation(certificatePolicyId2, null);    
List<PolicyInformation> policyInformations=new ArrayList<PolicyInformation>();   
policyInformations.add(policyInformation2);    
certificateExtensions.set(CertificatePoliciesExtension.NAME, new CertificatePoliciesExtension(policyInformations));

但抛出了一个例外:

java.io.IOException: DerValue.getOID, not an OID 19
    at sun.security.util.DerValue.getOID(DerValue.java:447)
    at sun.security.x509.CertificatePolicyId.<init>(CertificatePolicyId.java:56)

如何设置String arg0的{​​{1}}?

谢谢!

1 个答案:

答案 0 :(得分:0)

sun.security.util.DerValue(不是x509)基本上是ASN.1中定义和编码的十几种类型中的任何一种的包装器/持有者; DerValue(String)构造函数创建(包含的包装)仅ASN.1类型PrintableStringUTF8String(不是OID)。

有一个不同的类sun.security.util.ObjectIdentifier,它专门代表一个OID,(String)构造函数将该文本格式解析为OID对象:

 import sun.security.util.ObjectIdentifier;
 ...
 ObjectIdentifier oid = new ObjectIdentifier ("2.5.29.32.1");