HttpsURLConnection的使用
来源:互联网 发布:ab plc编程软件 编辑:程序博客网 时间:2024/05/21 07:53
HttpURLConnection的API参见这里
扩展方法及返回(毕竟英语课代表)
getCipherSuite():获得此次连接过程中用到的加密算法套件
getDefaultHostnameVerifier():获得被该类继承实例的默认认证域名
getDefaultSSLSocketFactory():获得被该类继承实例的默认静态SSL套接字工厂
getHostnameVerifier():获得该实例的认证域名
getLocalCertificates():获得握手阶段发送给服务端的证书
getLocalPrincipal():获得握手阶段发送给服务端的主体对象
getPeerPrincipal():获得定义此次会话的服务端的主体对象
getServerCertificates():获得定义此次会话的服务端的证书链(证书数组,一般是X509证书实例,猜的)
getSSLSocketFactory():获得安全SSL套接字工厂实例,用于建立https安全套接字连接
setDefaultHostnameVerifier(HostnameVerifier v):设置认证域名
setDefaultSSLSocketFactory(SSLSocketFactory sf):
设置SSL套接字工厂
setHostnameVerifier(HostnameVerifier v):…
setSSLSocketFactory(SSLSocketFactory sf): …
### 如何利用HttpsURLConnection建立SSL安全连接(单/双向认证)
懒得BB,先上一段代码:
“`
class UploadSignResultThread extends Thread {
@Override
public void run() {
super.run();
HttpsURLConnection connection = null;
try {
//设置SSLContext
SSLContext sslcontext = SSLContext.getInstance(“TLS”);
sslcontext.init(null, new TrustManager[]{myX509TrustManager}, null);
String head_str = "{\"aid\":" + "\"" + header.getAid() + "\"" + "}"; String payload_str = "{\"signature\":" + "\"" + mySignedData + "\"" + "}"; String nonce_str = header.getNonce(); String HMac = encryptHmac(hexStringToBytes((header.getNonce())), (base64UrlEncode(head_str.getBytes()) + "." + base64UrlEncode(payload_str.getBytes()) + "." + base64UrlEncode(nonce_str.getBytes())).getBytes()); String POST_JWT = "SignedMessage=" + base64UrlEncode(head_str.getBytes()) + "." + base64UrlEncode(payload_str.getBytes()) + "." + HMac; URL url = new URL(payload.getVerify()); connection = (HttpsURLConnection) url.openConnection(); connection.setSSLSocketFactory(sslcontext.getSocketFactory()); connection.setConnectTimeout(3000); connection.setRequestMethod("POST"); connection.setHostnameVerifier(SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); byte[] postRes = POST_JWT.getBytes(); // 获得输出流,向服务器输出内容 OutputStream outputStream = connection.getOutputStream(); // 写入数据 outputStream.write(postRes, 0, postRes.length); outputStream.close(); if (connection.getResponseCode() == 200) { PostFlag = 0; } else { PostFlag = 2; } } catch (Exception e) { e.printStackTrace(); } finally { if (connection != null) { connection.disconnect(); } } } }
还是上次的验签过程,现在通过Https认证实现:1.首先设置与服务端相同的握手协议:
SSLContext sslcontext = SSLContext.getInstance(“TLS”);
这里指定的是TLS,还有SSLv3等2.设置初始化SSLcontext上下文的信任管理者:
sslcontext.init(null, new TrustManager[]{myX509TrustManager}, null);
这里的myX509TrustManager是我定义的内部类,其实现如下:
private static TrustManager myX509TrustManager = new X509TrustManager() {
@Override public X509Certificate[] getAcceptedIssuers() { return null; } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } }; }
这里,getAcceptedIssuers():返回可接受的发行者X509证书数组;checkServerTrusted(X509Certificate[] chain, String authType):检查服务端证书链,将其与预埋入指定位置(android一般预埋至assets或者res/raw文件夹下)的服务端证书,该方法用主体和发行者比对的方式验证服务端证书链是否可信;checkClientTrusted(X509Certificate[] chain, String authType):检查客户端证书链,将其与预埋入指定位置(android一般预埋至assets或者res/raw文件夹下)的客户端证书,该方法用主体和发行者比对的方式验证客户端证书链是否可信.双向认证:实现上述后2个方法;单向认证:实现上述第2个验证服务端证书的方法;而我,不验证,意思就是完全信任(关系铁,老铁).3.根据SSLcontext上下文设置套接字工厂:
connection.setSSLSocketFactory(sslcontext.getSocketFactory());
4.设置域名认证,我偷懒默认允许所有,可以new 出个HostnameVerifier实现里面的方法,允许或屏蔽掉一些域名.
connection.setHostnameVerifier(SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
“`
- 就先写这么多,之后因为keystore的使用肯定会扩充,先这样,待续…
- HttpsURLConnection的使用
- 使用HttpsURLConnection的3种方法小结
- 使用HttpsURLConnection的3种方法小结
- https 的 HttpsURLConnection
- HttpsURLConnection
- HttpsURLConnection
- 使用HttpsURLConnection发送POST请求
- 使用HttpsURLConnection发送POST请求
- 使用HttpsURLConnection发送POST请求
- 一个HttpsURLConnection的简单封装
- J2EE 关于WebLogic下应用使用URL.openConnection获取连接返回 HttpsURLConnection与SOAPHttpsURLConnection的问题
- J2EE 关于WebLogic下应用使用URL.openConnection获取连接返回 HttpsURLConnection与SOAPHttpsURLConnection的问题
- WebLogic下使用URL.openConnection获取连接返回 HttpsURLConnection与SOAPHttpsURLConnection的问题
- WebLogic下使用URL.openConnection获取连接返回 HttpsURLConnection与SOAPHttpsURLConnection的问题
- WebLogic下使用URL.openConnection获取连接返回 HttpsURLConnection与SOAPHttpsURLConnection的问题
- HttpsURLConnection实现SSL的GET/POST请求
- https HttpsURLConnection请求的单向认证
- HttpsURLConnection实现SSL的GET/POST请求
- 一款真正可以用于爬百度图片的爬虫python代码,自己改进的!!
- 在perl中使用linux date
- 面向对象的第二个特征----继承I(单继承与多重继承)
- Dubbo简易监控中心安装
- JS 获取当前日期三个月的日期,去除周末
- HttpsURLConnection的使用
- Android贝塞尔曲线运用-圆形水波进度
- 设计模式之单例模式
- 视频动作识别--Temporal Segment Networks: Towards Good Practices for Deep Action Recognition
- JS 得到yy-MM--dd HH:mm:ss格式时间代码
- TCP三次握手时客户端ACK捎带数据
- Android Studio开发:新建xml,存色彩进去,再引用
- 3-3 构造函数的调用(高级)
- MySQL的中文乱码编码集解决方案