我想在属性证书中使用JSCEP,它们是X.509的一部分。当我检查Java库时。在java.security.cert包中包含一个抽象X509Certificate,但此证书从java.security.cert.Certificate继承getPublicKey方法,后者不是AC的一部分。
我的问题:
X509Certificate可以在没有公钥的情况下使用。这样就不会出现像JcaX509CertificateConverter这样的其他java类的问题了吗?AttributeCertificate类,它不从java.security.cert.Certificate继承发布于 2017-04-25 18:50:31
X509Certificate类表示一个公钥证书 (PKC),而属性证书 (AC)虽然是一个类似(但不多)的结构,但没有公钥。而且它们不是一回事。
没有公钥就不能使用X509Certificate,因为密钥是它的一部分。如果您查看一下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中所述。
...public密钥证书,它是将公钥值绑定到主题的数据结构。
属性证书是在这个RFC中定义的,它告诉PKC与PKC的区别:
有些人经常混淆PKCs和ACs。用类比可以清楚地区分这一点。PKC可以被看作是护照:它识别持卡人,往往持续很长时间,不应该是微不足道的获得。AC更像是入境签证:它通常是由不同的机构签发的,不会持续很长时间。由于获得入境签证通常需要出示护照,因此获得签证可能是一个更简单的过程。
在同一页中,您可以看到AC's结构与PKC非常不同,因此AC的实现不应继承于X509Certificate。虽然有一些类似的字段,但我认为它们不够接近,不足以证明继承是合理的(而且它们也有不同的用途和用途,这使我完全放弃继承)。
在您的情况下,最好的方法是:我建议使用现有的实现。BouncyCastle就是其中之一。如果不能使用外部库,则可以使用庞西卡塞尔密码作为引用。
https://stackoverflow.com/questions/43585819
复制相似问题