Это как браузер имеет дело с сертификатом SSL при подключении к HTTPS-сайтРазница в работе с сертификатом ssl в отношении браузера и jvm?
Когда я типа https://myDemoSite.com в браузере, прежде всего, мой браузер запрашивает сертификат от myDemoSite.com (из-за HTTPS), то myDemoSite отправить этот сертификат в браузер
После браузер получает этот сертификат, браузер проверяет, является ли он подписан проверенным органом или не так, как Verisign
Если да со второго этапа, то в качестве третьего шага он проверяет, является ли в.п. rtificate проблема имеет то же URL, который пользователь в браузере набранного
Теперь я соединяющий сайт HTTPS с помощью Java программы говорит HttpsConnectProg1.My вопрос, как programmei.e HttpsConnectProg1 будет иметь дело с этим сертификата, выданного с подключением по протоколу HTTPS сайта (хотя сертификат, выданный этим сайтом https, сертифицирован, т.е. подписан проверенным органом).
Я просто попробовал небольшую программу , подключающуюся к сайту https, который выдает сертификат. Я ожидал некоторой ошибки, например, ошибки sslhandshake или ошибки сертификата (так как я не добавлял этот сертификат в $ JAVA_HOME \ jre \ lib \ security), но, к моему удивлению, я не получил никаких ошибок.
Актуальным вопросом является HttpsConnectProg1 проверяет шаг 3, сделанный браузером, поскольку это очень важный шаг? Для справки, то здесь
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Properties;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
public class ConnectToDemoSite {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String urlStr = "https://www.myDemoSite.com/demo1/";
URL url;
Properties reply = new Properties();
try {
url = new URL(urlStr);
URLConnection conn = url.openConnection();
if(conn instanceof HttpsURLConnection)
{
HttpsURLConnection conn1 = (HttpsURLConnection)url.openConnection();
conn1.setHostnameVerifier(new HostnameVerifier()
{
public boolean verify(String hostname, SSLSession session)
{
return true;
}
});
reply.load(conn1.getInputStream());
}
else
{
conn = url.openConnection();
reply.load(conn.getInputStream());
}
} catch (MalformedURLException e) {
e.printStackTrace();
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
System.out.println("reply is"+reply);
}
}
, выданный известным CA –