我在尝试实施此方法时遇到了困难。我要做的是检查主机名是否与用户的请求(关于SSL证书)匹配,如果主机名匹配或不匹配,sslshopper.com将如何显示。
我的连接在Controller.java下:
HttpsURLConnection connection;
try {
connection = (HttpsURLConnection) urlOK.openConnection();
connection.connect();
} catch (IOException ex) {
throw new IOException("Failed to connect: " + ex.getMessage());
}
我设置了一个名为getHostnameVerified
的类,我将这些值从Controller.java传递给它getHostNameVerified.returnValid(this,urlOK,connection);
这是在Controller.java中找到的UI的setter:
public void getHostname(boolean hostnameValid) {
if (hostnameValid) {
hostName.setText("Hostname match");
} else if (!hostnameValid) {
hostName.setText("Hostname mis-match");
}
}
这是班级:
public abstract class getHostNameVerified implements HostnameVerifier {
public static void returnValid(Controller controller, URL url, HttpsURLConnection connection) {
try {
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
System.out.println("DEBUG getHostNameVerified verify entered");
return true;
}
};
}catch (Exception ex) {
System.out.print("getHostNameVerified exception: " + ex.getMessage());
}
}
}
什么都没发生。我没有看到我知道的SSL证书的println语句是真的。我实施了什么错吗?我完全难过了:(。
答案 0 :(得分:1)
您需要告诉HTTPURLConnection使用主机名验证器的实例。
这样的事情:
try {
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
} catch (Exception localException) { }