添加信任所有服务端证书也可在方法中控制

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使用,并实现双向认证相关推荐

  1. 【ssl认证、证书】SSL双向认证java实战、keytool创建证书

    文章目录 概述 keytool示例 参考 相关文章: //-----------Java SSL begin---------------------- [ssl认证.证书]SSL双向认证和SSL单向 ...

  2. Java nginx 双向ssl_使用Nginx实现HTTPS双向验证的方法

    https单向验证应用广泛想必大家都很熟悉,我已经在一篇博文中分享过,这次来看看Nginx如何实现双向验证. 单向验证与双向验证的区别: 单向验证: 指客户端验证服务器端证书,服务器并不需要验证客户端 ...

  3. 服务器双向认证 原理,什么叫SSL双向认证 SSL双向认证过程是怎样的

    我们都知道SSL认证能够分成SSL双向认证和SSL单向认证.那么,什么是SSL双向认证?SSL双向认证过程又是怎样的?小编就在接下来的内容为各位详细讲述. 什么叫SSL双向认证 SSL双向认证则是需要 ...

  4. Java实现Token登录验证(基于JWT的token认证实现)

    文章目录 一.JWT是什么? 二.使用步骤 1.项目结构 2.相关依赖 3.数据库 4.相关代码 三.测试结果 一.JWT是什么? 在介绍JWT之前,我们先来回顾一下利用token进行用户身份验证的流 ...

  5. java 认证和授权_SpringSecurity一:认证和授权

    什么是认证? 认证就是取得合法身份,比如京东需要用户登录以后才能才能下订单,这里的登录就是认证.登录成功以后就具有了合法身份可以继续进行下一步的操作. 常用的认证方式 常用的认证方式有基于sessio ...

  6. 网关信息认证服务器不可达,网关消息认证服务器不可达

    网关消息认证服务器不可达 内容精选 换一换 API的响应码如何定义?响应信息由后端API服务定义,API网关只做透传.响应信息由后端API服务定义,API网关只做透传.使用VPC通道,后端服务的主机端 ...

  7. 基于Token的WEB后台登录认证机制(并讲解其他认证机制以及cookie和session机制)

    几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RES ...

  8. mysql url认证_Springboot+shiro基于url身份认证和授权认证

    你还不会shiro吗?前奏 shiro核心配置文件(rolesFilter可选). 身份认证 多表登录源如何操作? 授权管理 如何解决界面多角色/资源问题 访问效果 权限管理在日常开发中很重要,所以硬 ...

  9. 登陆认证方案比较(JWT 登录认证 + Token 自动续期)

    概述 用户管理模块会涉及到加密及认证流程,今天就来讲讲认证功能的技术选型及实现. 技术选型 要实现认证功能,很容易就会想到 JWT 或者 session,但是两者有啥区别?各自的优缺点?应该 Pick ...

  10. portal认证 java_Apollo 源码解析 —— Portal 认证与授权(一)之认证

    摘要: 原创出处 http://www.iocoder.cn/Apollo/portal-auth-1/ 「芋道源码」欢迎转载,保留摘要,谢谢! 1. 概述 本文分享 Portal 的认证与授权,侧重 ...

最新文章

  1. C语言按两个字节读写二进制文件,C语言 读写二进制文件(示例代码)
  2. 重磅直播|嵌入式开发漫漫之路—从小白到技术骨干
  3. FTP服务(3)实现基于文件验证的vsftpd虚拟用户
  4. jQuery中deferred对象的使用(二)
  5. 龙族幻想最新东京机器人位置_龙族幻想:东京·白月境活动介绍
  6. 备战618,京东如何保障系统稳定性?
  7. ubuntu python3.6_在 Ubuntu 16.04 LTS 系统上安装 Python 3.6
  8. Python自动识别多个不完整图像拼接为完整图像
  9. am335x backlight
  10. 驱动研究日记-内核同步
  11. 游戏公司游戏策划面试笔记
  12. android 各版本对应的API(sdk) Level以及中文名称
  13. 一个商人骑一头驴要穿越1000公里长的沙漠,去卖3000根胡萝卜。已知驴一次性可驮1000根胡萝卜,但每走一公里又要吃掉一根胡萝卜。问:商人共可卖出多少胡萝卜? 答:533
  14. 阿里云 OSS + CDN 部署静态网站配置
  15. css中“zoom:1”是什么意思
  16. 国民经济行业代码查询系统-公司行业代码查询
  17. JS中关键字in的作用
  18. pyside2出现qt.qpa.plugin: Could not find the Qt platform plugin windows in 错误解决办法
  19. 基于Spring boot的个人理财系统
  20. 批量提取文件名的方法

热门文章

  1. HDU 2068 Choose the best route
  2. 2014025631嵌入式程序设计第一周学习总结
  3. Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals
  4. 树链刨分 HDU 3966
  5. 【产品体验】echo回声
  6. Audio Session Programming Guide
  7. 微博客程序 Yonkly
  8. 2019杭电多校第一场 Operation HDU - 6579
  9. 17年第八届蓝桥杯省赛(C语言B组) 题解
  10. Gulp和Webpack对比