JSCEP с сертификатом X509 и сертификатом атрибута

Я хочу использовать JSCEP с сертификатами атрибутов (AC) они являются частью X.509. Когда я проверяю библиотеки Java. в java.security.cert упаковать реферат X509Certificate содержится, но этот сертификат наследует getPublicKey метод из java.security.cert.Certificate, который не является частью переменного тока.

Мои вопросы:

  • Может ли X509Certificate использоваться без открытого ключа. Так что никаких проблем в других классах Java, таких как JcaX509CertificateConverter появляются?
  • Должен ли я реализовать свой собственный AttributeCertificate класс, который не наследуется от java.security.cert.Certificate?
  • Каков был бы подход наилучшей практики?

1 ответ

Решение

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 в качестве ссылки.

Другие вопросы по тегам