HTTPS Опубликовать запрос (не) с использованием сертификата / печати хеша?

Я признаю, что есть вероятность, что я не очень хорошо осведомлен о предмете, но я сделал НАГРУЗКИ чтения, и я все еще не могу получить ответ на свой вопрос.

Из того, что я узнал, чтобы сделать связь безопасной с HTTPS, мне нужно использовать какой-то открытый ключ (напоминает мне о pgp-шифровании).

Моя цель - сделать безопасным POST запрос из моего java-приложения (которое я, в момент его начала, перепишу в Android-приложение, если оно имеет значение), в php-приложение, доступное по адресу https.

Естественно, я провел некоторые исследования Google по этой теме и получил много результатов о том, как установить ssl-соединение. Ни для одного из этих результатов не использовались какие-либо сертификаты / отпечатки хешей. Они просто используют HttpsURLConnection вместо HttpURLConnectionвсе остальное практически идентично.

Прямо сейчас, почти скопируйте вставить кое-что, что я нашел здесь, это:

String httpsURL = "https://xx.yyyy.zzz/requestHandler.php?getParam1=value1&getParam2=value2";

    String query = "email=" + URLEncoder.encode("abc@xyz.com", "UTF-8");
    query+="&";
    query+="password="+URLEncoder.encode("tramtarie","UTF-8");

    URL myurl = new URL(httpsURL);
    HttpsURLConnection con = (HttpsURLConnection) myurl.openConnection();
    con.setRequestMethod("POST");

    con.setRequestProperty("Content-length",String.valueOf(query.length()));
    con.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
    con.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 5.0;Windows98;DigExt)");
    con.setDoOutput(true);
    con.setDoInput(true);

    DataOutputStream output = new DataOutputStream(con.getOutputStream());


    output.writeBytes(query);

    output.close();


    DataInputStream input = new DataInputStream(con.getInputStream());


    for(
    int c = input.read();
    c!=-1;c=input.read())
            System.out.print((char)c);
    input.close();

    System.out.println("Resp Code:"+con.getResponseCode());
    System.out.println("Resp Message:"+con.getResponseMessage());

К сожалению, это не работает и заканчивается этим исключением:

Exception in thread "main" javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative DNS name matching app.elessy.cz found

Это, вероятно, означает, что он проверяет сертификат и обнаруживает, что используемый мной сертификат не соответствует имени домена, для которого зарегистрирован (это сертификат веб-хостинга, зарегистрированный для домена веб-хостинга, а не домена, которым я владею, единственная причина, по которой я использую https) Это для защиты данных для внутренних целей, я не хочу, чтобы этот сайт посещался пользователями извне, поэтому этот сертификат должен быть в порядке).

Есть две вещи, которые я просто не понимаю о коде и обо всем.

  1. Ни один код, который мне удалось найти, не использует распечатки или сертификаты MD5/SHA-1 (предположительно, открытые ключи для шифрования сообщений?), Они просто каким-то образом автоматически подключаются к веб-сайту https и должны работать. Не работает для меня, хотя
  2. Мне действительно нужны те отпечатки md5/sha-1, которые мне предоставлены? Или, по крайней мере, что в данном контексте означают эти отпечатки?

Редактировать:

После данного ответа и дублирования оценки мне удалось заставить его работать - в том смысле, что я могу общаться с приложением за https. Но мне не пришлось использовать какой-либо вид md5/sha1. Как я узнаю теперь, что это безопасно? Есть ли этот протокол самостоятельно? Как будто эта связь защищена в любом случае, когда я использую встроенные классы Java для подключения к приложению за https?

Я, вероятно, не ищу точного технического объяснения, но скорее для гарантии того, что да - связь безопасна, даже если я не использую (сознательно) открытый ключ сертификата / сервера для шифрования своих сообщений. Что это делает соединение SSL для меня.

0 ответов

Другие вопросы по тегам