该类X509Certificate
表示公钥证书(PKC),而属性证书(AC)虽然是类似(但不是那么多)结构,但没有公钥。而且它们不是一回事。
AX509Certificate
不能在没有公钥的情况下使用,因为密钥是它的一部分。如果您查看RFC 的定义,您会发现它是一个必填字段:
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING }
TBSCertificate ::= SEQUENCE {
... lots of fields...
subjectPublicKeyInfo SubjectPublicKeyInfo,
... }
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
subjectPublicKey BIT STRING }
公钥也是 PKC 定义的一部分:绑定身份和公钥的东西,如RFC 中所述:
...公钥证书,这是将公钥值绑定到主题的数据结构
属性证书在此 RFC中定义,它说明了与 PKC 的区别:
有些人经常混淆 PKC 和 AC。一个类比可以使区分变得清晰。PKC 可以被视为像护照一样:它识别持有人,往往会持续很长时间,并且不应该是微不足道的。AC 更像是入境签证:它通常由不同的机构签发,并且不会持续很长时间。由于获得入境签证通常需要出示护照,因此获得签证可能是一个更简单的过程。
在同一页面中,您可以看到AC 的结构与PKC非常不同,因此 AC 的实现不应继承自X509Certificate
. 虽然有一些类似的领域,但我认为它们不足以证明继承是合理的(而且它们也有不同的目的和用途,这让我完全放弃了继承)。
在您的情况下最好的方法:我建议使用现有的实现。BouncyCastle 就是其中之一。如果不能使用外部库,可以使用BouncyCastle 的代码作为参考。