最近测试 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链接。
见附件。
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链接。
见附件。