java SSL 简单操作demo

当下的web应用好多都转到了https,有时候需要利用java发送https请求,但是呢服务器有证书,又没有好的办法得到服务器证书,一般会自定义jsse里的信任管理器,让客户端不验证服务器的证书的有效性,此方法一般就叫绕过证书之类的,下面给一个参考demo:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

/**  
 * @Title: SSLDemo1.java
 * @Package 
 * @Description: TODO(用一句话描述该文件做什么)
 * @author huhu  
 * @date 2016年1月21日 上午10:08:45
 * @version V1.0  
 */
public class SSLDemo1 {

	public static void main(String[] args) throws Exception {

		trustAllHttpsCertificates();

		HostnameVerifier hv = new HostnameVerifier() {
			@Override
			public boolean verify(String hostname, SSLSession session) {
				 System.out.println("Warning: URL Host: " + hostname + " vs. " + session.getPeerHost());  
				 return true;  
			}
		};
		HttpsURLConnection.setDefaultHostnameVerifier(hv);

		// 在建立Https连接之前做如上处理后,后续就跟普通http处理一样

		URL url = new URL("https://dynamic.12306.cn/otsweb/main.jsp");
		HttpsURLConnection conn  = (HttpsURLConnection) url.openConnection();
		SSLContext sc = SSLContext.getInstance("SSL");
		conn.connect();
//		BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())) ;
//		String input = "" ;
//
//		while((input = br.readLine()) != null){
//			 System.out.println(input);
//		}

	}

	private static void trustAllHttpsCertificates() throws Exception{

		TrustManager[] tms = new TrustManager[1];
		TrustManager tm = new CustomTrustManager();
		tms[0] = tm ;

		SSLContext context = SSLContext.getInstance("SSL");
		context.init(null, tms, null);
		HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
	}

	static class CustomTrustManager implements X509TrustManager{

		@Override
		public void checkClientTrusted(X509Certificate[] chain, String authType)
				throws CertificateException {

		}

		@Override
		public void checkServerTrusted(X509Certificate[] chain, String authType)
				throws CertificateException {

		}

		@Override
		public X509Certificate[] getAcceptedIssuers() {
			return null;
		}
	}
}
时间: 2024-08-08 21:43:28

java SSL 简单操作demo的相关文章

Java时间简单操作

使用java操作时间感觉真真蛋疼,还是我大C#舒服,一个DateTime全部搞定 这里的Date指的是java.util.Date 获取当前时间: // 创建一个当前时间的Date对象 Date time = new Date(); 蛋疼的地方,对时间增.减操作: // 使用Calendar类对时间增.减操作 Calendar c = Calendar.getInstance();// 获得一个Calendar实例,该类是抽象类所以不可以使用new构造方法 // 使用setTime方法创建一个时

Java 多线程IO简单实用Demo

多线程主要作用是充分利用Cpu,而不在于它的乱序性.本Demo不讲它竞争什么的.之前看过乱序打印ABC的例子什么的,那些有意义吗? 本Demo 是多线程打印文件夹下的文件,主要实现是用数组存放文件,一个游标遍历. 我们需要考虑在什么时候加互斥访问,本例用synchronized . 先考虑单线程的流程:客户端启动-->读取文件下的文件放到数组(IO)--> 取游标打印 ,游标加1 -- > 改文件写文件(IO) -- 重复上两步至越界 -- 结束 多线程时显然需要在"取游标打印

行为驱动:Cucumber + Selenium + Java(一) - Cucumber简单操作实例

场景(Scenarios) 场景是Cucumber结构的核心之一.每个场景都以关键字“Scenario:”(或本地化一)开头,后面是可选的场景标题.每个Feature可以有一个或多个场景,每个场景由一个或多个步骤组成.一个非常简单的场景示例可以是: Scenario:验证帮助功能.给定用户导航到Facebook.当用户单击帮助时,将打开帮助页面. 考虑一种情况,其中我们需要不止一次地执行测试场景.假设,我们需要确保登录功能适用于所有类型的订阅用户.这需要多次执行登录功能场景.复制粘贴相同的步骤为

Java连接MySQL数据库及简单操作代码

1.Java连接MySQL数据库 Java连接MySql需要下载JDBC驱动MySQL-connector-java-5.0.5.zip(举例,现有新版本).然后将其解压缩到任一目录.我是解压到D盘,然后将其目录下的MySQL-connector-java-5.0.5-bin.jar加到classpath里,具体如下: "我的电脑"-> "属性" -> "高级" -> "环境变量",在系统变量那里编辑clas

对java IO,NIO简单操作

对 IO,NIO的简单操作,详细看如下代码 1.InputStream,OutputStream是对字节流的操作,Reader,Writer是对字符的操作 2.对大文件的拷贝使用RandomAccessFile类和NIO 1 import java.io.*; 2 import java.nio.ByteBuffer; 3 import java.nio.channels.FileChannel; 4 5 public class IOWriteRead { 6 7 public static

JAVA使用POI操作excel

这里提一下,java操作excel的组件除了apache的poi,还有jexcelapi(jxl),其中poi组件的获取地址为poi.apache.org. poi组件中常用的类有HSSFworkbook表示一个完整的excel表格,HSSFsheet表示excel中的一个工作薄,HSSFRow表示工作薄中的一行,HSSFCell表示一个单元格 下面是一个简单的写入的demo public static void main(String [] args){ try { HSSFWorkbook

JDBC的简单操作

JDBC是一组能够执行SQL语句的API 由于传统的数据库操作方式需要程序员掌握各个不同的数据库的API,极其不便 因此java定义了JDBC这一标准的接口和类,为程序员操作数据库提供了统一的方式 JDBC的操作方式比较单一,由五个流程组成: 1.通过数据库厂商提供的JDBC类库向DriverManager注册数据库驱动 2.使用DriverManager提供的getConnection()方法连接到数据库 3.通过数据库的连接对象的createStatement方法建立SQL语句对象 4.执行

Apache Derby-02通过IJ简单操作DERBY

上回说到了Derby的历史以及需要准备的环境,这章将为大家介绍Apache Derby的简单操作 1.配置Derby环境 1.1去官网下载Derby_BIN并解压在文件夹中 http://mirrors.cnnic.cn/apache//db/derby/db-derby-10.12.1.1/db-derby-10.12.1.1-bin.zip 1.2如果需要在本地使用DERBY需要在系统变量中设置变量,derby是基于JAVA环境的所以在之前需要JAVA环境变量的配置 1.3 在系统变量创建D

jqm文件上传,上传图片,jqm的表单操作,jqm的ajax的使用,jqm文件操作大全,文件操作demo

最近在论坛中看到,在使用html5中上传图片或文件,出现各种问题.这一方面,我也一直没有做过,今天就抽出了一点时间来学习一下.现在的示例已经ok了,我就给大家分享一下,希望对大家有帮助. 好吧,我们先看看效果截图吧: 还行吧,来看页面代码: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <h