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