Вы ищете цепочку сертификатов, которая является обычной для PKI (Public Key Infrastructure).Один сертификат может подписать другой сертификат, чтобы показать, что этому сертификату можно доверять.
В простом примере был бы корневой сертификат, который самоподписан и является доверенным - все доверяют этому сертификату.Затем вы можете попросить владельца этого сертификата подписать ваш сертификат закрытым ключом сертификата Root.Поэтому, если кто-то хочет использовать ваш сертификат, он может проверить, что ваш сертификат был подписан корневым сертификатом, и если он доверяет корневому сертификату, он также может вам доверять.
В Java вы можете проверить, был ли сертификат подписан закрытым ключом соответствующего сертификата, используя что-то вроде этого:
X509Certificate yourCert = ...
X509Certificate root = ...
try {
yourCert.verify(root.getPublicKey()); }
catch (CertificateException | NoSuchAlgorithmException | InvalidKeyException | NoSuchProviderException e) {
//handle wrong algos
} catch (SignatureException ex) {
//signature validation error
}
Certificate::verify
служит для этой цели:
Проверяет, что этот сертификат был подписан с использованием закрытого ключа, соответствующего указанному общедоступному ключу.
Поскольку X509Certificate
расширяет Certificate
, вы можете использовать этот методв реализациях X509Certificate
(поскольку X509Certificate
является классом abstract
).
Также вы можете взглянуть на X509Certificate::verify(PublicKey, Provider)
, который принимает реализацию PublicKey
и Provider
.