Как проверить подпись сертификата x509? - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть два объекта X509Certificate x1 и x2.

Я хочу убедиться, что x2 был подписан x1.

Я думаю, что это делается с помощью открытого ключа x1 и подписиx2.

Как именно это сделать?

Я также хочу знать, является ли обычной практикой сравнение источника x2 с объектом x1 побайтно и показывать ошибкуесли они различаются.

Я нашел этот пост 12456079 , но не могу понять.

1 Ответ

1 голос
/ 27 сентября 2019

Вы ищете цепочку сертификатов, которая является обычной для 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...