我正在尝试使用Java(以及Axis2作为从WSDL创建类的机制)访问SharePoint服务器。如果站点是通过HTTP托管但是通过HTTPS它失败,我可以登录并执行一些操作。有没有人有这方面的经验或知道获得帮助的好资源?
感谢。
答案 0 :(得分:0)
可以肯定的是,您与安全站点的连接失败,因为您的连接不接受所提供的SSL证书。要对此进行测试,请在连接之前运行以下代码:
public static void trustAllSSL() {
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
public X509Certificate[] getAcceptedIssuers() { return null; }
}
};
HostnameVerifier hostVerify = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(hostVerify);
} catch (Exception e) {
e.printStackTrace();
}
}
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
public X509Certificate[] getAcceptedIssuers() { return null; }
}
};
HostnameVerifier hostVerify = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(hostVerify);
} catch (Exception e) {
e.printStackTrace();
}
}
如果您可以在运行上述代码后使用Axis2进行连接,那就是原因。然后,您可以继续使用上面的代码,或者从站点获取实际证书(使用IE或Firefox访问站点,然后从其缓存中获取证书)并将其添加到Java密钥库中。