От мен се изисква да създам програма, която валидира всеки даден сертификат X509 Version3, ако е надежден или не, чрез проверка на подписа. За да направя това, трябва да мога да знам публичния ключ на издателя, който е подписал този сертификат. Знам как да изведа информацията за издателя с помощта на метода 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());