java http 双向认证_HttpsURLConnection使用,并实现双向认证
添加信任所有服务端证书也可在方法中控制
package something;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
/**
* 信任所有证书
* @author hp
*
*/
public class AllTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
// TODO Auto-generated method stub
}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
// TODO Auto-generated method stub
}
@Override
public X509Certificate[] getAcceptedIssuers() {
// TODO Auto-generated method stub
return null;
}
}
使用HttpsURLConnection发送POST请求(默认443端口)
package something;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
public class HttpsRequest {
//测试url
private final static String URL_TEST="https://www.baidu.com";
//客户端证书路径
private final static String PATH="c://xxxx";
//证书密码
private final static String psw="123456";
/**
* 发送POST请求
* @param agrs
* @return
* @throws IOException
* @throws KeyManagementException
* @throws KeyStoreException
* @throws NoSuchAlgorithmException
* @throws CertificateException
* @throws UnrecoverableKeyException
*/
public String doPost(String agrs) throws IOException, KeyManagementException, KeyStoreException, NoSuchAlgorithmException, CertificateException, UnrecoverableKeyException{
//导入客户端证书
KeyStore ks=KeyStore.getInstance("pkcs12");
FileInputStream instream = new FileInputStream(new File(PATH));
ks.load(instream, psw.toCharArray());
KeyManagerFactory kmf=KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, psw.toCharArray());
//添加信任证书
TrustManager[] tm={new AllTrustManager()};//AllTrustManager()为信任所有证书
SSLContext ctx=SSLContext.getInstance("SSL");//创建ssl上下文
//初始化 ;参数1为null,则不上传客户端证书(通常情况都是如此);
ctx.init(kmf.getKeyManagers(), tm, new SecureRandom());
//ctx.init(kmf.getKeyManagers(), null, new SecureRandom());//验证系统默认证书
//ctx.init(kmf.getKeyManagers(), TrustManager[] tm, new SecureRandom());//导出服务端证书,然后按照keymanager一样实现trustmanager
SSLSocketFactory sf=ctx.getSocketFactory();
URL _url=new URL(URL_TEST);
HttpsURLConnection conn=(HttpsURLConnection) _url.openConnection();
conn.setRequestMethod("POST");//设定请求方法
conn.setConnectTimeout(20000);
conn.setReadTimeout(20000);
conn.setDoInput(true);//打开输入流
conn.setDoOutput(true);//打开输出流写入写出参数必需
conn.setSSLSocketFactory(sf);//添加ssl参数
//输出参数
PrintWriter pw=new PrintWriter(conn.getOutputStream());
pw.write(agrs);
pw.flush();
//获取输入流
BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuffer result=new StringBuffer();
String s=br.readLine();
while(s!=null){
result.append(s);
s=br.readLine();
}
pw.close();
br.close();
return result.toString();
}
}
java http 双向认证_HttpsURLConnection使用,并实现双向认证相关推荐
- 【ssl认证、证书】SSL双向认证java实战、keytool创建证书
文章目录 概述 keytool示例 参考 相关文章: //-----------Java SSL begin---------------------- [ssl认证.证书]SSL双向认证和SSL单向 ...
- Java nginx 双向ssl_使用Nginx实现HTTPS双向验证的方法
https单向验证应用广泛想必大家都很熟悉,我已经在一篇博文中分享过,这次来看看Nginx如何实现双向验证. 单向验证与双向验证的区别: 单向验证: 指客户端验证服务器端证书,服务器并不需要验证客户端 ...
- 服务器双向认证 原理,什么叫SSL双向认证 SSL双向认证过程是怎样的
我们都知道SSL认证能够分成SSL双向认证和SSL单向认证.那么,什么是SSL双向认证?SSL双向认证过程又是怎样的?小编就在接下来的内容为各位详细讲述. 什么叫SSL双向认证 SSL双向认证则是需要 ...
- Java实现Token登录验证(基于JWT的token认证实现)
文章目录 一.JWT是什么? 二.使用步骤 1.项目结构 2.相关依赖 3.数据库 4.相关代码 三.测试结果 一.JWT是什么? 在介绍JWT之前,我们先来回顾一下利用token进行用户身份验证的流 ...
- java 认证和授权_SpringSecurity一:认证和授权
什么是认证? 认证就是取得合法身份,比如京东需要用户登录以后才能才能下订单,这里的登录就是认证.登录成功以后就具有了合法身份可以继续进行下一步的操作. 常用的认证方式 常用的认证方式有基于sessio ...
- 网关信息认证服务器不可达,网关消息认证服务器不可达
网关消息认证服务器不可达 内容精选 换一换 API的响应码如何定义?响应信息由后端API服务定义,API网关只做透传.响应信息由后端API服务定义,API网关只做透传.使用VPC通道,后端服务的主机端 ...
- 基于Token的WEB后台登录认证机制(并讲解其他认证机制以及cookie和session机制)
几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RES ...
- mysql url认证_Springboot+shiro基于url身份认证和授权认证
你还不会shiro吗?前奏 shiro核心配置文件(rolesFilter可选). 身份认证 多表登录源如何操作? 授权管理 如何解决界面多角色/资源问题 访问效果 权限管理在日常开发中很重要,所以硬 ...
- 登陆认证方案比较(JWT 登录认证 + Token 自动续期)
概述 用户管理模块会涉及到加密及认证流程,今天就来讲讲认证功能的技术选型及实现. 技术选型 要实现认证功能,很容易就会想到 JWT 或者 session,但是两者有啥区别?各自的优缺点?应该 Pick ...
- portal认证 java_Apollo 源码解析 —— Portal 认证与授权(一)之认证
摘要: 原创出处 http://www.iocoder.cn/Apollo/portal-auth-1/ 「芋道源码」欢迎转载,保留摘要,谢谢! 1. 概述 本文分享 Portal 的认证与授权,侧重 ...
最新文章
- C语言按两个字节读写二进制文件,C语言 读写二进制文件(示例代码)
- 重磅直播|嵌入式开发漫漫之路—从小白到技术骨干
- FTP服务(3)实现基于文件验证的vsftpd虚拟用户
- jQuery中deferred对象的使用(二)
- 龙族幻想最新东京机器人位置_龙族幻想:东京·白月境活动介绍
- 备战618,京东如何保障系统稳定性?
- ubuntu python3.6_在 Ubuntu 16.04 LTS 系统上安装 Python 3.6
- Python自动识别多个不完整图像拼接为完整图像
- am335x backlight
- 驱动研究日记-内核同步
- 游戏公司游戏策划面试笔记
- android 各版本对应的API(sdk) Level以及中文名称
- 一个商人骑一头驴要穿越1000公里长的沙漠,去卖3000根胡萝卜。已知驴一次性可驮1000根胡萝卜,但每走一公里又要吃掉一根胡萝卜。问:商人共可卖出多少胡萝卜? 答:533
- 阿里云 OSS + CDN 部署静态网站配置
- css中“zoom:1”是什么意思
- 国民经济行业代码查询系统-公司行业代码查询
- JS中关键字in的作用
- pyside2出现qt.qpa.plugin: Could not find the Qt platform plugin windows in 错误解决办法
- 基于Spring boot的个人理财系统
- 批量提取文件名的方法