`
15000346240
  • 浏览: 17879 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java代码访问基于https安全协议的网站或服务器

阅读更多

Java代码访问基于https安全协议的网站或服务器, 一般分为有证书和无证书两种,无证书的大部分都很简单,说一下我遇到的有证书的:
证书类型:pfx,(个人证书带密码)
服务器配置:基于SSL加密模式(我这边是基于nginx配置的https安全验证)

 

    1. 首先要有jks格式文件的证书秘钥文件,如果没有可以向提供方索要pfx证书,带密码,然后把pfx证书转换为jks格式的密钥文件,因为用程序访问的话必须要密钥类型的文件才行,首先进入你的jdk,进入:
      %JAVA_HOME%/jre/bin目录下,执行如下命令:
      keytool -importkeystore -v -srckeystore client.pfx -srcstoretype pkcs12 -srcstorepass 111111 -destkeystore client.jks -deststoretype jks
      命令说明:一般命令从字面意思都能看懂,就不在说明
      kytool是jdk自带的一个密钥工具,源文件时客户端证书client.pfx,类型未pkcs12,密码是111111,目标密钥文件是client.jks,目标类型是jks

 

  1. 现在有了密钥文件和密码,就可以用java代码来访问了,把下面这段代码直接拷贝到你的
    package mr;
    
    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.security.KeyManagementException;
    import java.security.KeyStore;
    import java.security.KeyStoreException;
    import java.security.NoSuchAlgorithmException;
    import java.security.UnrecoverableKeyException;
    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;
    
    import javax.net.ssl.HostnameVerifier;
    import javax.net.ssl.HttpsURLConnection;
    import javax.net.ssl.KeyManager;
    import javax.net.ssl.KeyManagerFactory;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.SSLSession;
    import javax.net.ssl.SSLSocketFactory;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;
    
    public class MarketReplyTest {
    
    	public static String HTTPSURL = "https://196.123.131.7/DSFA/MarketReply/GetReplayRecords?opType=get3DESStr&str=111111";
    	public static void main(String[] args){
    		testHttpsPost();
    	}
    	public static void testHttpsPost() {
    		String keystorefile = "c:\\\\cafakeystore_client1.jks";// 个人pfx证书转换为jks密钥文件,该密钥文件可以用程序进行访问
    		String keystorepw = "111111";// 证书密码
    		KeyStore keystore = null;
    		try {
    			keystore = KeyStore.getInstance("JKS");//密钥类型为jks
    			keystore.load(new FileInputStream(keystorefile), keystorepw.toCharArray());// 加载密钥文件
    			KeyManagerFactory keymanagerfactory = KeyManagerFactory.getInstance("SunX509");// 获取密钥管理类的工厂类
    			keymanagerfactory.init(keystore, keystorepw.toCharArray());// 工厂类初始化密钥文件,这里依然需要密码
    			KeyManager[] akeymanager = keymanagerfactory.getKeyManagers();// 获取密钥管理类
    			TrustManager[] atrustmanager = { new TrustAnyTrustManager() };// 获取受信任的证书
    			SSLContext ssl = SSLContext.getInstance("TLS");// 获取安全协议上下文
    			ssl.init(akeymanager, atrustmanager, null);// 初始化安全协议
    			SSLSocketFactory sslsocketfactory = ssl.getSocketFactory();// 获取协议通信
    			URL url = new URL(HTTPSURL);
    			HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
    			https.setSSLSocketFactory(sslsocketfactory);
    			https.setHostnameVerifier(new TrustAnyHostnameVerifier());
    			https.setDoInput(true);
    			https.setDoOutput(true);
    			https.setUseCaches(false);
    			https.setRequestMethod("POST");
    			https.connect();
    			InputStream in = https.getInputStream();
    			BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    			String result = "";
    			String line = "";
    			while ((line = reader.readLine()) != null) {
    				result += line + "\\r";
    			}
    			System.out.println(result);// 输出结果值,
    			reader.close();
    			https.disconnect();
    
    		} catch (KeyStoreException e) {
    			e.printStackTrace();
    		} catch (NoSuchAlgorithmException e) {
    			e.printStackTrace();
    		} catch (CertificateException e) {
    			e.printStackTrace();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} catch (KeyManagementException e) {
    			e.printStackTrace();
    		} catch (UnrecoverableKeyException e) {
    			e.printStackTrace();
    		}
    
    	}
    
    	/**
    	 *信任所有证书(个人证书本来就不受信任,所以在此做处理)
    	 **/
    	private static class TrustAnyTrustManager implements X509TrustManager {
    		public void checkClientTrusted(X509Certificate[] arg0, String arg1)
    				throws CertificateException {
    		}
    
    		public void checkServerTrusted(X509Certificate[] arg0, String arg1)
    				throws CertificateException {
    		}
    
    		public X509Certificate[] getAcceptedIssuers() {
    			return new X509Certificate[] {};
    		}
    	}
    
    	/**
    	 * 验证IP
    	 **/
    	private static class TrustAnyHostnameVerifier implements HostnameVerifier {
    		public boolean verify(String hostname, SSLSession session) {
    			return hostname.equals(session.getPeerHost());
    		}
    	}
    
    }
     
分享到:
评论

相关推荐

    java代码实现coap 协议请求 服务器端+客户端

    - 压缩包中的"Coap_Study"可能包含示例代码、配置文件或教程文档,帮助初学者理解如何在Java环境中实现CoAP服务器和客户端。建议解压并仔细阅读其中的内容,特别是样例代码,它们通常提供了如何使用库的直观示例。 ...

    JAVA代码实现远程操作服务器文件

    "JAVA代码实现远程操作服务器文件" Titulo: JAVA代码实现远程操作服务器文件 JAVA代码实现远程操作服务器文件是指使用JAVA语言实现远程操作服务器文件的功能,实现FTP,共享文件夹操作。该功能可以实现远程服务器...

    Java实现opc通信协议代码

    - 编写Java代码,使用OPC库提供的API连接到OPC服务器,注册订阅和数据变更事件。 - 实现数据读取和写入逻辑,处理OPC通信中的异常情况。 - 运行和测试代码,确保数据交换的正确性和稳定性。 以上就是关于“Java实现...

    SSH协议连接远程服务器的java实现

    本文将深入探讨如何使用Java语言来实现基于SSH协议的远程服务器连接,并介绍相关的关键技术和代码实现细节。 #### 二、SSH协议简介 SSH协议是一种加密网络协议,它为数据通信提供安全性。通过使用SSH协议,用户可以...

    Java Https请求,跳过证书,直接访问

    在Java编程中,HTTPS(Hypertext Transfer Protocol Secure)是一种用于在互联网上安全传输数据的协议,它基于HTTP,但提供了额外的安全性层,通过SSL/TLS(Secure Sockets Layer/Transport Layer Security)来加密...

    基于Java的视频服务器

    【基于Java的视频服务器】 Java视频服务器是一种使用Java编程语言构建的应用程序,它设计用于接收、处理和分发视频内容。这种服务器的核心功能是管理视频数据的生命周期,从上传到处理,再到用户请求时的传输。Java...

    基于Java的网上书店

    8. **安全性与性能优化**:项目可能涉及到HTTPS安全协议,保证用户信息传输的安全;同时,通过缓存技术、负载均衡、数据库优化等手段,提升系统性能,应对高并发访问。 9. **测试与部署**:在开发过程中,会进行...

    java搭建本地服务器,android客户端访问

    下面将详细阐述如何使用Java搭建本地服务器,并让Android客户端进行访问。 首先,Java作为后端语言,可以通过多种框架来搭建服务器。例如,我们可以使用轻量级的Spring Boot框架,它简化了创建独立的、生产级别的...

    基于JAVA的安全电子商务文档

    综上所述,基于Java的安全电子商务文档涵盖了Java的安全模型、加密技术、网络通信安全、身份验证、会话管理、并发处理以及高级框架的应用等多个方面,旨在构建一个全方位、多层次的安全电子商务环境,保护用户隐私,...

    基于java的网上花店

    8. **部署与运行**:项目可能部署在Tomcat或Jetty等Java应用服务器上,通过HTTP/HTTPS服务对外提供访问。管理员需要配置服务器环境,如设置虚拟主机、调整内存大小等。 9. **问题与改进**:描述中提到项目存在一些...

    电信SMGP协议java实现

    - 确保网络环境畅通,SMSC服务器可访问。 - 了解并遵循SMGP协议规范,避免因错误的数据格式导致通信失败。 - 对异常情况进行处理,如连接超时、数据解析错误等。 - 考虑性能优化,如连接池的使用、心跳维持等。 ...

    基于Java的RTSP服务源码

    本资源提供的“基于Java的RTSP服务源码”是一个用Java实现的RTSP服务器,它允许开发者创建和管理实时多媒体流。 RTSP的主要目标是提供一个框架,使得客户端可以请求服务器上的媒体数据,并控制播放的速率、方向、...

    Java通过UA协议操作OPC的demo和客户端工具

    1. **OPC UA协议**:OPC UA不仅提供了数据访问的功能,还包括了安全认证、事件处理和信息模型等高级特性。它支持基于证书的安全机制,确保数据传输的安全性。OPC UA使用XML和二进制编码,允许高效的数据传输,并且...

    cmpp2.0短信网关发送短信代码(java)

    Java代码实现这部分功能时,通常会用到Socket编程来处理TCP连接,以及多线程技术来处理并发请求。 在描述中提到的JAVA代码,应该包含了创建CMPP连接、登录验证、发送短信、接收应答和关闭连接等关键步骤。这部分...

    基于Java多线程与线程安全实践-基于Http协议的断点续传

    Java提供了一些机制来确保线程安全,如synchronized关键字用于同步方法或代码块,防止多个线程同时访问共享资源。此外,还有volatile关键字用于确保变量的可见性,以及Lock接口和ReentrantLock类等高级锁定机制。 ...

    基于java的购物车代码

    在编程领域,购物车功能是电子商务网站不可或缺的一部分,它允许用户选择商品并暂时存储,以便在结账时一次性购买。本教程将深入讲解一个基于Java实现的购物车系统,这是一份非常适合初学者学习和参考的源代码。下面...

    Java代码实例-多线程与线程安全实践-基于Http协议的断点续传.rar

    综上所述,这个Java代码实例深入探讨了多线程、线程安全和HTTP协议的结合,展示了如何在实际项目中实现断点续传功能。通过学习和理解这个示例,开发者将能够构建更高效、更健壮的网络应用程序。

    rtsp协议访问 java源码

    在Java中实现RTSP协议访问,主要是通过编程来建立与服务器的连接,发送控制命令,接收并处理响应,从而播放或控制远程媒体资源。下面我们将详细探讨RTSP协议及其在Java中的应用。 RTSP协议主要由以下几个核心概念...

    Java代码 ,RFID开发

    在Java代码中,可能会用到如`java.net.Socket`或`javax.net.ssl.HttpsURLConnection`等类。 接着,数据处理部分,Java的强类型和面向对象特性使得它可以很好地处理复杂的数据结构。开发者可能定义一些类来表示RFID...

    程序设计-基于Java的多线程Web服务器

    在IT领域,构建一个基于Java的多线程Web服务器是一项重要的技术挑战,它涉及到网络编程、并发处理以及HTTP协议的理解。下面将详细讲解这个主题。 首先,Java是一种跨平台的编程语言,它提供了丰富的库和工具来支持...

Global site tag (gtag.js) - Google Analytics