Я разделю ответ на 3 части.Первый - это фон, второй - выбор библиотеки, кода реализации (ссылки, которые я использовал для своей реализации с должным доверием)
В прошлом я реализовывал очень похожий вариант использования.У меня были изготовления IOT от поставщика, и для их внедрения я реализовал тот же процесс проверки X509, который вы упомянули.
Реализация: Для моей реализации я ссылался на следующее.Вы можете включить BC в качестве вашего defaultProvider (Security.setProvider) и использовать следующий код.Код напрямую решает 1,3,5.Код здесь: https://nakov.com/blog/2009/12/01/x509-certificate-validation-in-java-build-and-verify-chain-and-verify-clr-with-bouncy-castle/
Теперь перейдем к 2, ответ на этот вопрос зависит от того, как вы получите сертификат от вашего клиента и какие дополнительные данные будут предоставлены приложением.Этот высокоуровневый поток выглядит следующим образом: а) клиент создает сертификат; б) клиент выполняет дайджест с использованием некоторого приемлемого алгоритма.SHA256 довольно популярны, вы можете увеличить силу в зависимости от потребностей и количества вычислений, которые у вас есть.Как только клиент создает дайджест, чтобы доказать, что он является владельцем сертификата, вы можете подписать дайджест, используя закрытый ключ устройства.Затем это может быть передано приложению верификатора. C) Получив сертификат и подпись, вы можете использовать сертификат и открытый ключ, связанный с ним, для проверки подписи, применяя тот же дайджест, а затем проверки подписи.здесь: http://www.java2s.com/Code/Java/Security/SignatureSignAndVerify.htm
Я не уверен на 100%, что означает 4.Но если это означает подтверждение личности (тот, кто создает сертификат, обязательно должен быть тем, кем он является, подпись и проверка обеспечат то же самое)
Хотя вы можете реализовать варианты использования с помощью API-интерфейсов безопасности Java, я использовал bouncycastleосновной API для реализации вариантов использования.API Bouncycastle гораздо более богаты и проверены в бою, особенно для странных алгоритмов кривой EC, которые мы должны были использовать, и вы обнаружите, что многие люди клянутся BouncyCastle.
Надеюсь, это поможет!