Процесс проверки сертификата X509 V3

Мне нужно создать программу, которая проверяет любой заданный сертификат 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());

person Mike    schedule 16.02.2014    source источник
comment
Подумайте немного об этом. Насколько безопасно было бы извлечь открытый ключ непосредственно из сертификата, который вы хотите проверить, используя именно этот открытый ключ?   -  person Henry    schedule 16.02.2014


Ответы (1)


Мне нужно создать программу, которая проверяет любой заданный сертификат X509 версии 3, является ли он доверенным или нет, путем проверки подписи. Для этого мне нужно знать открытый ключ эмитента, подписавшего данный сертификат.

Нет. Либо вы, либо тот, кто дал вам задание, не понимаете PKI. Идея состоит в том, что вы уже доверяете некоторым эмитентам на основании уже имеющегося их сертификата, например. в файле cacerts, распространяемом с JRE, и, следовательно, их открытые ключи. Если сертификат, который вас просят проверить, отслеживается до одного из этих эмитентов и проходит все остальные проверки, вы можете ему доверять. Простой проверки с помощью открытого ключа недостаточно.

person user207421    schedule 16.02.2014
comment
Хорошо, теперь это имеет смысл. Вы имеете в виду, что я могу использовать файл кареток, когда хочу проверить подпись сертификата пользователя? - person Mike; 16.02.2014