Java代码访问基于https安全协议的网站或服务器, 一般分为有证书和无证书两种,无证书的大部分都很简单,说一下我遇到的有证书的:
证书类型:pfx,(个人证书带密码)
服务器配置:基于SSL加密模式(我这边是基于nginx配置的https安全验证)
- 首先要有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
- 现在有了密钥文件和密码,就可以用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()); } } }
相关推荐
- 压缩包中的"Coap_Study"可能包含示例代码、配置文件或教程文档,帮助初学者理解如何在Java环境中实现CoAP服务器和客户端。建议解压并仔细阅读其中的内容,特别是样例代码,它们通常提供了如何使用库的直观示例。 ...
"JAVA代码实现远程操作服务器文件" Titulo: JAVA代码实现远程操作服务器文件 JAVA代码实现远程操作服务器文件是指使用JAVA语言实现远程操作服务器文件的功能,实现FTP,共享文件夹操作。该功能可以实现远程服务器...
- 编写Java代码,使用OPC库提供的API连接到OPC服务器,注册订阅和数据变更事件。 - 实现数据读取和写入逻辑,处理OPC通信中的异常情况。 - 运行和测试代码,确保数据交换的正确性和稳定性。 以上就是关于“Java实现...
本文将深入探讨如何使用Java语言来实现基于SSH协议的远程服务器连接,并介绍相关的关键技术和代码实现细节。 #### 二、SSH协议简介 SSH协议是一种加密网络协议,它为数据通信提供安全性。通过使用SSH协议,用户可以...
在Java编程中,HTTPS(Hypertext Transfer Protocol Secure)是一种用于在互联网上安全传输数据的协议,它基于HTTP,但提供了额外的安全性层,通过SSL/TLS(Secure Sockets Layer/Transport Layer Security)来加密...
【基于Java的视频服务器】 Java视频服务器是一种使用Java编程语言构建的应用程序,它设计用于接收、处理和分发视频内容。这种服务器的核心功能是管理视频数据的生命周期,从上传到处理,再到用户请求时的传输。Java...
8. **安全性与性能优化**:项目可能涉及到HTTPS安全协议,保证用户信息传输的安全;同时,通过缓存技术、负载均衡、数据库优化等手段,提升系统性能,应对高并发访问。 9. **测试与部署**:在开发过程中,会进行...
下面将详细阐述如何使用Java搭建本地服务器,并让Android客户端进行访问。 首先,Java作为后端语言,可以通过多种框架来搭建服务器。例如,我们可以使用轻量级的Spring Boot框架,它简化了创建独立的、生产级别的...
综上所述,基于Java的安全电子商务文档涵盖了Java的安全模型、加密技术、网络通信安全、身份验证、会话管理、并发处理以及高级框架的应用等多个方面,旨在构建一个全方位、多层次的安全电子商务环境,保护用户隐私,...
8. **部署与运行**:项目可能部署在Tomcat或Jetty等Java应用服务器上,通过HTTP/HTTPS服务对外提供访问。管理员需要配置服务器环境,如设置虚拟主机、调整内存大小等。 9. **问题与改进**:描述中提到项目存在一些...
- 确保网络环境畅通,SMSC服务器可访问。 - 了解并遵循SMGP协议规范,避免因错误的数据格式导致通信失败。 - 对异常情况进行处理,如连接超时、数据解析错误等。 - 考虑性能优化,如连接池的使用、心跳维持等。 ...
本资源提供的“基于Java的RTSP服务源码”是一个用Java实现的RTSP服务器,它允许开发者创建和管理实时多媒体流。 RTSP的主要目标是提供一个框架,使得客户端可以请求服务器上的媒体数据,并控制播放的速率、方向、...
1. **OPC UA协议**:OPC UA不仅提供了数据访问的功能,还包括了安全认证、事件处理和信息模型等高级特性。它支持基于证书的安全机制,确保数据传输的安全性。OPC UA使用XML和二进制编码,允许高效的数据传输,并且...
Java代码实现这部分功能时,通常会用到Socket编程来处理TCP连接,以及多线程技术来处理并发请求。 在描述中提到的JAVA代码,应该包含了创建CMPP连接、登录验证、发送短信、接收应答和关闭连接等关键步骤。这部分...
Java提供了一些机制来确保线程安全,如synchronized关键字用于同步方法或代码块,防止多个线程同时访问共享资源。此外,还有volatile关键字用于确保变量的可见性,以及Lock接口和ReentrantLock类等高级锁定机制。 ...
在编程领域,购物车功能是电子商务网站不可或缺的一部分,它允许用户选择商品并暂时存储,以便在结账时一次性购买。本教程将深入讲解一个基于Java实现的购物车系统,这是一份非常适合初学者学习和参考的源代码。下面...
综上所述,这个Java代码实例深入探讨了多线程、线程安全和HTTP协议的结合,展示了如何在实际项目中实现断点续传功能。通过学习和理解这个示例,开发者将能够构建更高效、更健壮的网络应用程序。
在Java中实现RTSP协议访问,主要是通过编程来建立与服务器的连接,发送控制命令,接收并处理响应,从而播放或控制远程媒体资源。下面我们将详细探讨RTSP协议及其在Java中的应用。 RTSP协议主要由以下几个核心概念...
在Java代码中,可能会用到如`java.net.Socket`或`javax.net.ssl.HttpsURLConnection`等类。 接着,数据处理部分,Java的强类型和面向对象特性使得它可以很好地处理复杂的数据结构。开发者可能定义一些类来表示RFID...
在IT领域,构建一个基于Java的多线程Web服务器是一项重要的技术挑战,它涉及到网络编程、并发处理以及HTTP协议的理解。下面将详细讲解这个主题。 首先,Java是一种跨平台的编程语言,它提供了丰富的库和工具来支持...