服务器端代码:
- import java.net.*;
- import javax.net.ssl.*;
- import java.io.*;
- import java.security.*;
- public class SSLServer {
- private static int port = 50003;
- private static SSLServerSocket server;
- public static void initSSLServerSocket() {
- try {
- /** 要使用的证书名 **/
- String cert = "\\key.cert";
- /** 要使用的证书密码 **/
- char certPass[] = "123456".toCharArray();
- /** 证书别称所使用的主要密码 **/
- char certAliaMainPass[] = "123456".toCharArray();
- /** 创建JKS密钥库 **/
- KeyStore keyStore = KeyStore.getInstance("JKS");
- keyStore.load(new FileInputStream(cert), certPass);
- /** 创建管理JKS密钥库的X.509密钥管理器 **/
- KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
- keyManagerFactory.init(keyStore, certAliaMainPass);
- SSLContext sslContext = SSLContext.getInstance("TLSV1");
- /** 想使用SSL时,更改成如下,注释部分 **/
- //SSLContext sslContext = SSLContext.getInstance("SSLV3");
- sslContext.init(keyManagerFactory.getKeyManagers(), null, null);
- SSLServerSocketFactory sslServerSocketFactory = sslContext.getServerSocketFactory();
- server = (SSLServerSocket) sslServerSocketFactory.createServerSocket(port);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public static void main(String args[]) {
- try {
- initSSLServerSocket();
- System.out.println("服务器在端口 [" + port + "] 等待连接...");
- while (true) {
- SSLSocket socket = (SSLSocket) server.accept();
- new CreateThread(socket);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- class CreateThread extends Thread {
- private static BufferedReader in;
- private static PrintWriter out;
- private static Socket s;
- public CreateThread(Socket socket) {
- try {
- s = socket;
- in = new BufferedReader(new InputStreamReader(s.getInputStream(), "GB2312"));
- out = new PrintWriter(s.getOutputStream(), true);
- start();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public void run() {
- try {
- String msg = in.readLine();
- System.out.println("接收到: " + msg);
- out.write("服务器接收到的信息是: " + msg);
- out.flush();
- s.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
import java.net.*; import javax.net.ssl.*; import java.io.*; import java.security.*; public class SSLServer { private static int port = 50003; private static SSLServerSocket server; public static void initSSLServerSocket() { try { /** 要使用的证书名 **/ String cert = "\\key.cert"; /** 要使用的证书密码 **/ char certPass[] = "123456".toCharArray(); /** 证书别称所使用的主要密码 **/ char certAliaMainPass[] = "123456".toCharArray(); /** 创建JKS密钥库 **/ KeyStore keyStore = KeyStore.getInstance("JKS"); keyStore.load(new FileInputStream(cert), certPass); /** 创建管理JKS密钥库的X.509密钥管理器 **/ KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509"); keyManagerFactory.init(keyStore, certAliaMainPass); SSLContext sslContext = SSLContext.getInstance("TLSV1"); /** 想使用SSL时,更改成如下,注释部分 **/ //SSLContext sslContext = SSLContext.getInstance("SSLV3"); sslContext.init(keyManagerFactory.getKeyManagers(), null, null); SSLServerSocketFactory sslServerSocketFactory = sslContext.getServerSocketFactory(); server = (SSLServerSocket) sslServerSocketFactory.createServerSocket(port); } catch (Exception e) { e.printStackTrace(); } } public static void main(String args[]) { try { initSSLServerSocket(); System.out.println("服务器在端口 [" + port + "] 等待连接..."); while (true) { SSLSocket socket = (SSLSocket) server.accept(); new CreateThread(socket); } } catch (Exception e) { e.printStackTrace(); } } } class CreateThread extends Thread { private static BufferedReader in; private static PrintWriter out; private static Socket s; public CreateThread(Socket socket) { try { s = socket; in = new BufferedReader(new InputStreamReader(s.getInputStream(), "GB2312")); out = new PrintWriter(s.getOutputStream(), true); start(); } catch (Exception e) { e.printStackTrace(); } } public void run() { try { String msg = in.readLine(); System.out.println("接收到: " + msg); out.write("服务器接收到的信息是: " + msg); out.flush(); s.close(); } catch (Exception e) { e.printStackTrace(); } } }
- import java.net.*;
- import javax.net.ssl.*;
- import java.io.*;
- public class SSLClient {
- static int port = 50003;
- public static void main(String args[]) {
- try {
- SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
- Socket s = factory.createSocket("192.168.12.41", port);
- BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream(), "GB2312"));
- PrintWriter out = new PrintWriter(s.getOutputStream(), true);
- out.println("证书启用成功!");
- System.out.println(in.readLine());
- out.close();
- s.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
import java.net.*; import javax.net.ssl.*; import java.io.*; public class SSLClient { static int port = 50003; public static void main(String args[]) { try { SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault(); Socket s = factory.createSocket("192.168.12.41", port); BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream(), "GB2312")); PrintWriter out = new PrintWriter(s.getOutputStream(), true); out.println("证书启用成功!"); System.out.println(in.readLine()); out.close(); s.close(); } catch (Exception e) { e.printStackTrace(); } } }
服务器启动:java SSLServer
key.cert 文件需要和 SSLServer.class 同一目录下
客户端运行:java -Djavax.net.ssl.trustStore=key.cert SSLClient
这个客户端就是运行不成功,不知道是目录错误还是别的。
这样运行最方便:把证书拷贝到java home/lib/security目录下,名字改为jssecacerts,然后可以直接执行客户端:
本人测试过没问题。
key文件生成:keytool -genkey -keystore Key.cert -keyalg rsa –alias tempkey
或者: keytool -genkey -alias tempkey -keysize 512 -validity 3650 -keyalg RSA -dname "CN=sariel.iteye.com, OU=sariel CA, O=sariel Inc, L=Stockholm, S=Stockholm, C=SE" -keypass 123456 -storepass 123456 -keystore key.cert
发表评论
-
NIO入门
2012-07-25 17:40 696见附件!!!! -
Axis-Webservice课程
2012-07-10 11:40 1908http://hi.baidu.com/annleecn/ ... -
SSL安全socket的通讯实例
2012-06-07 17:52 1082学习了SSL的基本原理后. ... -
使用keytool来创建管理密钥及证书
2012-06-07 17:51 1782使用SSL来实现安全加密通讯需要有密码对及公钥证书等.. ... -
用SSL构建安全的Socket
2012-06-07 16:38 1369SSL(安全套接层)是 Netscape公司在1994年开发的 ... -
keytool 用法总结
2012-06-07 16:37 15110内容概览: keytool的几个常用的命令。 1.创建证书 ... -
XStream实现Object与XML转换解决方案
2012-06-05 11:16 1100方案说明: 1:特点 > 0 配置 > ... -
AAAA26
2012-04-28 11:19 0建议3 IO操作流使用有Buffer功能的class. (1. ... -
AAAA25
2012-04-28 11:19 03.5.2 建议 建议1 public类型的底层函数需对输入 ... -
AAAA24
2012-04-28 11:18 0规则5 对类中日志工具对象logger应声明为static. ... -
AAAA23
2012-04-28 11:18 0规则4 Java 1.4中大量字符串的“相加”操作应该使用St ... -
AAAA22
2012-04-28 11:18 03.5 性能与可靠性 3.5.1 规则 规则1 对Debu ... -
AAAA21
2012-04-28 11:17 0建议11 使用Java 5.0枚举来替代以前用数字与字符串的同 ... -
AAAA20
2012-04-28 11:16 0建议7 不要使用难懂的技巧性很高的语句,除非很有必要时。(1. ... -
AAAA19
2012-04-28 11:14 03.4.2 建议 建议1 记录异常不要保存exception ... -
AAAA18
2012-04-28 11:04 0规则14 判断语句不要使用”* == true”来判断为真 说 ... -
AAAA17
2012-04-28 11:04 0规则9 不要使用 System.out 与 System.er ... -
AAAA16
2012-04-28 11:03 0应改为如下形式: private final static i ... -
AAAA15
2012-04-28 11:03 0应改为如下形式: private final static i ... -
AAAA14
2012-04-28 11:02 0规则5 在程序中使用异常处理还是使用错误返回码处理,根据是否有 ...
相关推荐
5. 通过SSLContext获取SSLServerSocketFactory或SSLSocketFactory来创建SSLServerSocket或SSLSocket,进行安全的通信。 由于SSL/TLS协议的复杂性,开发人员在使用JSSE进行SSL/TLS编程时需要深入理解相关的加密原理...
Mina支持多种协议,如TCP、UDP以及SSL/TLS加密,因此它非常适合用于构建如FTP服务器、HTTP服务器、数据库连接等。 Socket,又称套接字,是操作系统提供的一个编程接口,用于不同进程之间的网络通信。在Java中,`...
在现代Web开发中,为了实现实时双向通信,JavaScript结合Socket技术(通常指的是WebSocket协议)成为一种常见且强大的解决方案。WebSocket是HTML5引入的一个新特性,允许服务器和浏览器之间建立长时间保持连接的通道...
除了基本的网络通信功能,MyC++Socket还支持多线程处理客户端连接、异步I/O、SSL加密等高级特性,能够满足复杂网络应用的需求。 总结,MyC++Socket库为C++程序员提供了强大的网络编程工具,通过封装底层细节,使得...
《易语言SSL_Socket通信模块源码解析与应用》 在信息技术日新月异的今天,网络通信的安全性越来越受到重视。SSL(Secure Sockets Layer)协议作为网络安全传输的重要手段,广泛应用于各种网络服务中。易语言,作为...
- 对于敏感数据的传输,可以考虑使用SSL/TLS加密,Python的`ssl`模块提供了相关的支持。 10. **实际应用**: - 这种客户端-服务端-触发端的架构常见于即时通讯、消息推送系统、分布式任务调度等场景。通过socket...
SSL(Secure Socket Layer)确保了数据传输的安全性;而Keepalived则提供故障切换和高可用性,确保服务不间断运行。接下来,我们将详细探讨这三个组件及其部署过程。 **Haproxy** Haproxy是一款开源的负载均衡器,...
在Java编程语言中,SSLSocket(Secure Sockets Layer Socket)是用于实现安全网络通信的重要组件,它基于SSL/TLS协议栈,为应用程序提供加密的数据传输服务。本教程将深入探讨Java中的SSLSocket应用,包括其基本概念...
在Ubuntu系统中,可以通过Apt轻松安装Apache,并配置虚拟主机、SSL证书、重写规则等,以支持动态内容和静态资源的高效分发。 3. PHP: PHP(Hypertext Preprocessor)是一种广泛应用的开源脚本语言,主要用于Web...
2. **ssl**:这里的ssl通常指的是OpenSSL,一个用于加密通信的库,支持SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议。它为libcurl提供了安全的加密连接,保证了数据传输的安全性。 3. **zlib*...
6. **连接SSL**:将SSL结构体与Socket绑定,使用`SSL_set_fd()`函数设置Socket描述符。然后,调用`SSL_connect()`来建立SSL连接,这会进行SSL握手,包括证书交换、密钥协商等。 7. **发送和接收数据**:SSL连接建立...
10. **SSL/TLS安全通信**:对于涉及敏感信息的网络通信,Java提供了JSSE(Java Secure Socket Extension)框架,可以实现基于SSL或TLS的安全套接字连接,确保数据的加密传输。 总的来说,《Java+TCP/IP+Socket编程+...
3. **安全性**:使用SSL/TLS协议可以为Socket通信提供加密,确保数据安全。 4. **NIO(非阻塞I/O)**:Java NIO库提供了非阻塞的I/O操作,适用于高并发的Socket通信场景。 5. **缓冲区管理**:使用ByteBuffer等NIO...
- 安全性方面,可以使用SSL/TLS协议实现安全套接字,保护数据传输的安全。 7. **实战应用** - Java网络编程常用于开发Web应用、分布式系统、文件传输、在线游戏等。 - 实现服务器与客户端之间的实时通信,如聊天...
在Java编程中,`SSLSocket`是用于创建安全套接层(SSL)或传输层安全(TLS)连接的重要类,它提供了加密的数据传输服务,确保了网络通信的安全性。`SSLSocket`是Java标准库`javax.net.ssl`包的一部分,主要应用于...
SSLSocket(Secure Socket Layer Socket)是一种基于SSL协议的安全通信机制,能够提供端到端的数据加密,确保数据在网络传输过程中的安全性。本教程主要针对初学者,详细讲解如何在Android应用中实现SSLSocket通信,...
7. **安全通信**:如果涉及到敏感数据的传输,如用户认证信息,需要使用SSL/TLS加密以保证数据的安全性。 在提供的文件列表中: - `readme.doc`可能是项目说明文档,包含了如何集成和使用这个socket封装的具体步骤...
SSLSocket socket = (SSLSocket) sf.createSocket("server_address", server_port); ``` 然后,我们可以通过SSLSocket进行正常的Socket通信,包括输入流和输出流的读写。在开始通信之前,会进行SSL握手,这是一个...
「C#实现SSLSocket加密通讯方法详解」 在网络通讯中,安全性是一个非常重要的方面,而SSL/TLS协议则是最常用的加密通讯协议之一。C#作为一个强大的编程语言,可以轻松地实现SSL/TLS协议的加密通讯。下面将详细介绍...
Java SSL(Secure Socket Layer)套接字是一种用于在两个应用程序之间建立安全通信通道的协议,主要目的是为了确保数据传输的安全性。SSL通过使用加密技术来保护数据,防止未经授权的访问和篡改。在Java中,我们可以...