簡體   English   中英

具有X509證書和屬性證書的JSCEP

[英]JSCEP with X509Certificate and Attribute Certificate

我想將JSCEP與屬性證書(AC)一起使用,它們是X.509的一部分。 當我檢查Java庫時。 java.security.cert包中,包含抽象X509Certificate ,但是此證書從java.security.cert.Certificate繼承了getPublicKey方法,該方法不屬於AC。

我的問題:

  • 是否可以在沒有公共密鑰的情況下使用X509Certificate證書。 這樣在其他Java類(如JcaX509CertificateConverter出現問題?
  • 我應該實現自己的AttributeCertificate類,該類不繼承自java.security.cert.Certificate嗎?
  • 最佳做法是什么?

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中所述

...公鑰證書,是將公鑰值綁定到主題的數據結構


此RFC中定義了屬性證書 證書說明了與PKC的區別:

有些人經常混淆PKC和AC。 類推可以使區分清楚。 PKC可以看作是護照:它可以識別持有人,可以持續很長時間,而且獲取也不容易。 AC更像是入境簽證:它通常是由不同的機構簽發的,不會持續很長時間。 由於獲得入境簽證通常需要出示護照,因此獲得簽證可能是一個更簡單的過程。

在同一頁面中,您可以看到AC的結構PKC有很大不同,因此AC的實現不應繼承自X509Certificate 盡管有一些類似的字段,但我認為它們之間的距離不足以證明繼承的合理性(它們也具有不同的用途和用途,這使我完全放棄了繼承)。

在您的情況下最好的方法:我建議使用現有的實現。 BouncyCastle就是其中之一 如果您不能使用外部庫,則可以使用BouncyCastle的代碼作為參考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM