- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我获取了一个开源代码,并尝试在我的项目中使用它,但出现此错误:X509Generator 类型的方法SubjectKeyIdentifier(SubjectPublicKeyInfo) 未定义。我的代码如下:
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.security.GeneralSecurityException;
import java.security.KeyPair;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1InputStream;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.x509.AuthorityKeyIdentifier;
import org.bouncycastle.asn1.x509.BasicConstraints;
import org.bouncycastle.asn1.x509.ExtendedKeyUsage;
import org.bouncycastle.asn1.x509.Extensions;
import org.bouncycastle.asn1.x509.GeneralName;
import org.bouncycastle.asn1.x509.GeneralNames;
import org.bouncycastle.asn1.x509.KeyPurposeId;
import org.bouncycastle.asn1.x509.KeyUsage;
import org.bouncycastle.asn1.x509.SubjectKeyIdentifier;
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
import org.bouncycastle.asn1.x509.X509Extensions;
import org.bouncycastle.asn1.x509.X509Name;
import org.bouncycastle.jce.X509Principal;
import org.bouncycastle.x509.X509V3CertificateGenerator;
...
private SubjectKeyIdentifier getSubjectKeyIdentifier(PublicKey publicKey)
throws IOException
{
InputStream input;
SubjectPublicKeyInfo keyInfo;
input = new ByteArrayInputStream(publicKey.getEncoded());
keyInfo = new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(input).readObject());
return SubjectKeyIdentifier(keyInfo);
}
我想我需要使用 509Extension 但我不知道如何使用。而且我不知道这是否也是解决我的问题的好方法。谢谢您的回答!
最佳答案
您修改了类的名称,但我敢打赌它是 X509Generator
。虽然 SubjectKeyIdentifier
是导入的 bouncycaSTLe 类的名称,因此可见,但 return subjectKeyIdentifier (args)
不是类名的有效语法,因此编译器会尝试将其解释为您的类中的方法名称,该名称不存在,因此会出现错误。
可能您想调用此类的构造函数,或者其中的静态方法。但这两个都不存在以 SubjectPublicKeyInfo
作为参数,可能是因为从 key 计算 keyid 是很重要的;请参阅rfc 3280或5280 。相反(假设您有 bcpkix 以及 bcprov)使用 JcaX509ExtensionUtils.createSubjectKeyIdentifier (或其 Truncated 兄弟)直接在 (JCE) PublicKey 对象上,或者在 SubjectPublicKeyInfo
上使用父类(super class) X509ExtensionUtils
,您可以直接从编码构造它(无需处理ASN1 明确)使用
SubjectPublicKeyInfo.getInstance(encoding /*e.g. publickey.getEncoded()*/)
使用 X509V3CertificateGenerator
(如果您没有注意到它已被弃用,已被 bcpkix 中的 X509v3CertificateBuilder
废弃),您无需管理 X509Extension
对象本身,尽管它们存在于内部。您只需调用
generator.addExtension(oid_obj_or_string,boolean critical,encodable_or_bytearray)
与新版本相关:Using DEROctetString vs pure Extension
And i don't know if it's a good way to solve my problem too.
既然你不告诉我们你的问题是什么,我也不知道。
关于java - X509Generator 类型的方法SubjectKeyIdentifier(SubjectPublicKeyInfo) 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57412583/
我是一名优秀的程序员,十分优秀!