`

Java SSL

 
阅读更多

 一直调查SSL的问题,毫无进展,头疼,先把手头搞定的资料整理下:

 

网上的资料很多,偷懒一下把。

 

服务器端代码:

package com.ricoh.rits.bct.ssl;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.Socket;
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 javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;

import com.sun.net.ssl.KeyManagerFactory;
import com.sun.net.ssl.SSLContext;

public class SSLServer {
	public static final int PORT = 8888;
	public static SSLServerSocket server;
	
	public SSLServer() {}
	
	@SuppressWarnings("deprecation")
	public static SSLServerSocket getServerSocket(int port){
		SSLServerSocket s = null;
		try {
			String key = "E:\\others\\ssl\\SSLKey";
			char keyStorePass[] = "rst200233".toCharArray();
			char keyPassword[] = "rst200233".toCharArray();
			
			KeyStore ks = KeyStore.getInstance("JKS");
			ks.load(new FileInputStream(key),keyStorePass);
			
			//create Manager Secret Key Library of JKS
			KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
			kmf.init(ks, keyPassword);
			
			SSLContext sslContext = SSLContext.getInstance("SSLv3");
			
			//init SSL context,second agrument tell JSSE the CA where from
			//set null means get CA from the javax.net.ssl.trustStore
			//third argument is the JSSE ramdonly generated,while this agrument will affect the security of the system
			//it is good chioce to set its value null,can ensure the JSSE security.
			sslContext.init(kmf.getKeyManagers(), null, null);
			
			//according to the privious configuration on SSLContext to create SSLServerSocketFactory,different with common method
			SSLServerSocketFactory factory = sslContext.getServerSocketFactory();
			s = (SSLServerSocket) factory.createServerSocket(port);
			
			
		} 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 (UnrecoverableKeyException e) {
			e.printStackTrace();
		} catch (KeyManagementException e) {
			e.printStackTrace();
		}
		
		return (s);
	}
	
	public static void main(String[] args) {
		try {
			server = getServerSocket(PORT);
			System.out.println("Waiting for connection... on port " + PORT);
			while(true){
				SSLSocket socket = (SSLSocket) server.accept();
				new CreateThread(socket);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

class CreateThread extends Thread{
	static BufferedReader in;
	static PrintWriter out;
	static Socket s;
	
	public CreateThread(Socket socket) {
		try {
			s = socket;
			in = new BufferedReader(new InputStreamReader(s.getInputStream(),"UTF-8"));
			
			out = new PrintWriter(s.getOutputStream(),true);
			
			start();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	@Override
	public void run() {
		String msg;
		StringBuilder builder = new StringBuilder();
		try {
			msg = in.readLine();
			builder.append(msg);
			
			System.out.println(builder.toString());
			out.println(builder.toString());
			s.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}

 

其实只要在浏览器Type :https://localhost:8888也可以访问,输出的内容如下:

 

GET / HTTP/1.1

但是,把服务器的线程内容稍作修改的话,

 

   msg = in.readLine();
   builder.append(msg);
   
   while(msg != null){
    msg = in.readLine();
    builder.append(msg);
   }

 

  

会出现一个问题:

 

不知为何,一致阻塞在哪里,百思不得其解。

 

或者在IDE如下

客户端代码:

package com.ricoh.rits.bct.ssl;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.net.ssl.SSLSocketFactory;

public class SSLClient {
	
	static int port = 8888;
	public static void main(String[] args) {
		System.out.println(System.getProperty("java.home"));
		SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
		try {
			Socket s = factory.createSocket("localhost", port);
			PrintWriter out = new PrintWriter(s.getOutputStream(),true);
			out.println("你好,我叫何剑!!!");
			out.close();
			s.close();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

参考资料:

 http://fishhappy365.iteye.com/blog/963876

 http://java.chinaitlab.com/JavaSecurity/792540.html

 http://www.51testing.com/?uid-202848-action-viewspace-itemid-134594

 

      下面的命令来检测是否已经正确完成了授权。
  keytool -list -v -keystore SSLKey(生成的证书名称)

分享到:
评论

相关推荐

    Java ssl socket 双向认证

    Java SSL(Secure Socket Layer)套接字是一种用于在两个应用程序之间建立安全通信通道的协议,主要目的是为了确保数据传输的安全性。SSL通过使用加密技术来保护数据,防止未经授权的访问和篡改。在Java中,我们可以...

    android+java ssldemo

    本文将深入探讨"android+java ssldemo"中的核心知识点,包括SSL/TLS协议的工作原理、双向认证的概念以及在华为手机上进行性能测试的考虑。 首先,SSL/TLS协议是互联网上保障数据传输安全的重要机制,它通过加密通信...

    Java SSLSocket的使用

    在Java编程中,`SSLSocket`是用于创建安全套接层(SSL)或传输层安全(TLS)连接的重要类,它提供了加密的数据传输服务,确保了网络通信的安全性。`SSLSocket`是Java标准库`javax.net.ssl`包的一部分,主要应用于...

    javaSSL代码

    Java SSL(Secure Socket Layer)是Java平台用于实现安全网络通信的API,它为应用程序提供了创建安全套接字层(SSL)或传输层安全(TLS)连接的能力。在Java中,SSL主要用于加密网络通信,确保数据在传输过程中的...

    java_ssl.rar_JAVA SSL _The Client_ssl_ssl java

    在"java_ssl.rar_JAVA SSL _The Client_ssl_ssl java"这个压缩包中,可能包含的是关于Java SSL连接服务器和客户端的相关教程或代码示例。 首先,我们来详细了解一下Java中的SSL连接过程: 1. **握手阶段**:当...

    SSL.rar_JAVA SSL _ssl_ssl java

    标题"SSL.rar_JAVA SSL _ssl_ssl java"表明这个压缩包包含的是关于Java中实现SSL/TLS协议的示例代码,可能是服务器端和客户端的简单实现。 描述中提到"SSL加密简单的服务端和客户端书写.希望对大家有所帮助",这...

    java ssl连接 SSLServerSocket

    Java中的SSL连接主要涉及到安全套接层(Secure Socket Layer)技术,用于在互联网上提供安全通信。SSLServerSocket是Java中的一个类,它用于创建服务器端的SSL连接,提供了加密和身份验证的能力,确保数据传输的安全...

    javaSSL.zip

    Java SSL(Secure Socket Layer)和TLS(Transport Layer Security)是网络安全通信的重要组成部分,主要用于加密传输数据,确保网络上的敏感信息不被窃取或篡改。Java平台提供了对SSL/TLS协议的支持,使得开发者...

    JAVA实现SSL协议

    Java 实现 SSL(Secure Socket Layer)协议主要用于在网络通信中提供安全性和私密性,它通过加密数据和验证身份来确保信息在互联网上的安全传输。在Java中,SSL协议的实现主要依赖于`java.security`和`javax.net.ssl...

    ssl_java.zip

    Java平台提供了一套完整的API,即JSSE(Java Secure Socket Extension),来支持SSL协议。在Java中实现SSL双向认证,也被称为mutual authentication,是指客户端和服务器都需要向对方证明自己的身份。以下将详细讲解...

    java ssl通讯程序

    Java SSL(Secure Socket Layer)通信程序是用于在Java应用程序中实现安全网络通信的重要技术。SSL是一种标准协议,它提供了一种安全的方式,使得客户端和服务器之间的数据传输能够防止被窃听、篡改或伪造。SSL已被...

    java ssl证书制作工具

    Java SSL证书制作工具,如Portecle,是用于创建、管理和查看数字证书的安全软件。SSL(Secure Sockets Layer)证书是网络安全的一种基础组件,广泛应用于网站加密,确保数据传输过程中的隐私性和完整性。Portecle...

    SslClient:简单的 Java SSL 客户端

    【标题】"SslClient:简单的 Java SSL 客户端" 在网络安全日益重要的今天,SSL(Secure Socket Layer)和它的继任者TLS(Transport Layer Security)已成为数据加密和身份验证的标准。Java作为广泛使用的编程语言,...

    基于ssl的Java的socket网络通信

    本篇文章将详细讲解基于SSL(Secure Socket Layer)的Java Socket网络通信,帮助开发者理解如何在Java中实现安全的、加密的数据传输。 SSL是一种广泛使用的网络安全协议,它为网络通信提供了数据加密、服务器身份...

    Tomcat_SSL.rar_JAVA SSL _ssl_ssl java_tomcat_tomcat ssl

    本教程将深入讲解如何在Tomcat中配置SSL,以便在开发和部署Java Web应用时,能够提供安全的数据交换环境。 首先,了解SSL/TLS的基本原理。SSL/TLS协议用于在客户端浏览器和服务器之间建立安全的连接,它通过使用...

    ssl java实现

    在Java中实现SSL,主要是通过Java的JSSE(Java Secure Socket Extension)框架来完成的。下面将详细介绍Java中实现SSL的基本步骤、核心概念以及相关的API。 ### 1. SSL协议概述 SSL协议主要包含三个部分:握手协议...

    Java SSL安全通讯

    下载cer.zip文件后解压,得到cer文件夹,该目录下有运行脚本,其中Test文件夹为java项目源码,直接导出到Eclipse。 SSLServer主类在com.csii.ssl包下,其它pack下的内容都用不到。 cer目录下除server.sh,client.sh,...

    java https ssl 实例 例子

    Java sslSocket 聊天实例是使用 Java 的 SSL SOCKET 编程来实现安全聊天室功能的示例程序。 十二、用 COMMVIEW 工具截获浏览器访问支付宝的 TCP/IP 包 COMMVIEW 是一个网络嗅探工具,能够截获网络数据包。在本实例...

    java SSL HttpClient

    java SSL HttpClient。java 通过ssl去访问服务器(tomcat)

Global site tag (gtag.js) - Google Analytics