Мне нужно создать программу, которая проверяет любой заданный сертификат X509 версии 3, является ли он доверенным или нет, путем проверки подписи. Для этого мне нужно знать открытый ключ эмитента, подписавшего данный сертификат. Я знаю, как вывести информацию об эмитенте с помощью метода getIssuerDN(), но чего я не знаю, так это как получить открытый ключ эмитента, когда я знаю только его имя !
Единственное решение, которое у меня есть на данный момент, — это вести список открытых ключей для наиболее распространенных центров сертификации в Интернете и просто выполнять поиск по нему. Хотя это решение выполнимо, мне оно кажется непрактичным.
Поэтому есть ли другая идея получить открытый ключ эмитента напрямую из сертификата, а затем завершить процесс проверки?
Вот мой код для получения имени эмитента, но НЕ его открытого ключа.
URL url = new URL("https link here!");
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.connect();
Certificate cert[] = con.getServerCertificates();
X509Certificate x509cert = (X509Certificate) cert[0];
String[] st= x509cert.getIssuerDN().toString().split(",");
System.out.println("Issuer CN is: "+st[0].toString());