我在尝试实现此方法时遇到困难。我想做的是检查主机名是否与用户的请求匹配(关于 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 语句。我执行错了吗?我完全被难住了:(。
最佳答案
您需要告诉 HTTPURLConnection 使用您的主机名 validator 的一个实例。
像这样:
try {
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
} catch (Exception localException) { }
关于java - 主机名 validator 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33674457/