Https Basic Auth

最近测试 Https 连接,遇到了些问题。

1. Caused by: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

对方使用的是JDK 1.8,他们默认的是TLSV1.2, 我使用的是1.7,  我这边是1.0 的。
造成一直认证失败,开始以为要导入证书。设置请求默认1.2,就可以了。

System.setProperty("https.protocols", "TLSv1.1,TLSv1.2");
System.setProperty("jsse.enableSNIExtension", "false");


2.授权 401. 加密采用 Basic 认证,java自带的Base64 有些bug,网上找了个Base 64.

URL url = new URL("https://");
URLConnection uc = url.openConnection();

HttpURLConnection conn = (HttpURLConnection) uc;
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("POST");

String user_pass = username + ":" + password;
String encoded = Base64.encode(user_pass.getBytes());

conn.addRequestProperty("Accept", "application/xml");
conn.setRequestProperty("Content-Type", "application/xml");
conn.setRequestProperty("Authorization", "Basic " + encoded);


3. Https 证书导入,实际上两步骤,已经可以请求成功了,为了测试还是导入了证书。

Key tool 导入cert file to cacerts

C:\Program Files\Java\jdk1.7.0_80\jre\bin>keytool -import -keystore cacerts -storepass changeit -keypass changeit -alias e-xx.com -file D:\cert\staging.gate.crt

C:\Program Files\Java\jdk1.7.0_80\jre\bin>keytool -list -v -alias e-xx.com -keystore cacerts -storepass changeit

4.httpClient 忽略cert file, 指定 TLSV1.2,不设置系统参数,enableSNIExtension,因为会影响到其他ssl链接。
见附件。

猜你喜欢

转载自a545807638.iteye.com/blog/2285163