Вопрос по java, urlconnection, certificate, https – Не могу получить сертификат сервера с сайта

2

Я не могу получить сертификат со своего веб-сайта (ни одного другого веб-сайта). Я пробовал некоторые решения сHttpsURLConnection и методgetServerCertificates но ничто не решает проблему.

 URL httpsURL = new URL("https://www.google.com.br/");
 HttpsURLConnection connection = (HttpsURLConnection)httpsURL.openConnection();
 Certificate[] certs = connection.getServerCertificates(); 

Я получаю исключение, в котором говорится, что & quot; getServerCertificates не может быть разрешен. & Quot;

Я не считаю необходимым использовать хранилище ключей, не так ли?

Это хорошая идея, чтобы всегда было ясно из вашего вопроса, какой язык вы используете. Хотя опытный Java-программист может сразу распознать это как Java-код, другие (как я) будут изо всех сил пытаться узнать, какой язык вы используете. rlandster
извините, я запомню это в следующем вопросе. Спасибо Jefferson Fidencio

Ваш Ответ

1   ответ
1

I get an exception saying that getServerCertificates cannot be resolved..

Это странно. Вы уверены, что используете правильные классы? Если я запускаю этот код:

import java.io.IOException;
import java.net.URL;
import java.security.cert.Certificate;

import javax.net.ssl.HttpsURLConnection;

public class Test {
    public static void main(String[] args) throws IOException {
        URL httpsURL = new URL("https://www.google.com.br/");
        HttpsURLConnection connection = (HttpsURLConnection) httpsURL.openConnection();
        connection.connect();
        Certificate[] certs = connection.getServerCertificates();
        for (Certificate cer : certs) {
            System.out.println(cer.getPublicKey());
        }
    }
}

Я получаю результат как:

Sun RSA public key, 1024 bits
  modulus: 13069990984429476578...
  public exponent: 65537
Sun RSA public key, 1024 bits
  modulus: 14179907349200548596...
  public exponent: 65537

Проверьте, какую фабрику сокетов SSL вы используете, возможно, с этим что-то не так. Добавьте этот код к себе и посмотрите, что из этого получится (например, для меня этоcom.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl):

System.out.println(connection.getSSLSocketFactory().getClass());
System.out.println(connection.getDefaultSSLSocketFactory().getClass());
Теперь все работает отлично! Спасибо! Jefferson Fidencio

Похожие вопросы