我是一个完全的初学者,我一直试图与服务器建立连接很长一段时间
public class Test {
public static void main(String[] args) throws ClientProtocolException, IOException {
DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.getCredentialsProvider().setCredentials(
new AuthScope("9.5.127.34", 80),
new UsernamePasswordCredentials("root", "passw0rd"));
String url_copied_from_firebug = "https://9.5.127.34/powervc/openstack/volume/v1/115e4ad38aef463e8f99991baad1f809//volumes/3627400b-cd98-46c7-a7e2-ebce587a0b05/restricted_metadata"
HttpGet httpget = new HttpGet(url_copied_from_firebug);
HttpResponse response = httpClient.execute(httpget);
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line = "";
while ((line = rd.readLine()) != null) {
System.out.println(line);
}
}
}
我尝试运行代码时遇到的错误是
线程“main”中的异常javax.net.ssl.SSLPeerUnverifiedException:peer未经过身份验证
我尝试将端口号从80更改为443,但它无效。我想我是从它开始的,可能会遗漏很多东西。请指出我正确的方向。
提前完成。
答案 0 :(得分:1)
您的问题不是HTTP身份验证。您的http客户端无法验证具有证书颁发机构的服务器的ssl证书 - 这可能是因为您使用的是自签名证书。
查看HttpClient documentation,了解有关如何自定义客户端以允许自签名证书的说明。
以下是创建接受所有证书和主机名的HttpClient的示例 - 只需记住将它与您信任的服务器一起使用:
private DefaultHttpClient getSSLHttpClient(final URL url) throws RestClientException {
try {
final X509TrustManager trustManager = createTrustManager();
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, new TrustManager[]{trustManager}, null);
SSLSocketFactory ssf = new SSLSocketFactory(ctx, createHostnameVerifier());
AbstractHttpClient base = new DefaultHttpClient();
ClientConnectionManager ccm = base.getConnectionManager();
SchemeRegistry sr = ccm.getSchemeRegistry();
sr.register(new Scheme(HTTPS, url.getPort(), ssf));
return new DefaultHttpClient(ccm, base.getParams());
} catch (final Exception e) {
throw new RestClientException(FAILED_CREATING_CLIENT, "Failed creating http client",
ExceptionUtils.getFullStackTrace(e));
}
}
private X509TrustManager createTrustManager() {
X509TrustManager tm = new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkServerTrusted(final X509Certificate[] chain, final String authType)
throws CertificateException {
}
@Override
public void checkClientTrusted(final X509Certificate[] chain, final String authType)
throws CertificateException {
}
};
return tm;
}
private X509HostnameVerifier createHostnameVerifier() {
X509HostnameVerifier verifier = new X509HostnameVerifier() {
@Override
public boolean verify(final String arg0, final SSLSession arg1) {
return true;
}
@Override
public void verify(final String host, final String[] cns, final String[] subjectAlts)
throws SSLException {
}
@Override
public void verify(final String host, final X509Certificate cert)
throws SSLException {
}
@Override
public void verify(final String host, final SSLSocket ssl)
throws IOException {
}
};
return verifier;
}
答案 1 :(得分:0)
首先,您必须配置server.xml文件。您必须取消注释哪个行启动连接器端口=“8443”