当前位置: 源码素材网 » Java教程 » 详情页

Java使用SSL 确保订单的安全

  •   时间:2019-10-07
  • 概述:SSL

Java使用SSL 确保订单的安全,我们在网上有时候要碰到发送自己的信息、下达订单等需要在网络中传播重要信息的时候,如何保证这些信息不被其他人获取是一个至关重要的问题。本例通过编程实现了使用SSL 来确保订单的安全。运行此程序即从文件中装载关键字和证书,从而通过SSL 下达订单。

实现方法和思路:

javax.net.SSLServerSocket 类继承了ServerSocket 类,这个类的构造器都是保护类型的。SSLServerSocket 实例都是通过一个抽象的工厂类javax.net.SSLServerSocketFactory 来创建。通过一个静态SSLServerSocketFactory.getDefault()方法返回一个SSLServerSocketFactory 实例。SSLServerSocketFactory 类有3 个重载的createServerSocket() 方法, 这些方法返回SSLServerSocket 实例。
Com.sun.net.ssl.SSLContext 对象负责创建完全配置和初始化的安全服务sockets。为建立这样的安全服务socket,需要:使用keytool 产生公共的关键字和证书;为将使用的运算法则创建一个SSLContext;为将使用的证明材料资源创建一个TrustManagerFactory 对象;创建一个KeyStore对象。

程序代码编写如下:

1.编写useSecureOrderTaker 类的基本框架,该类包括整型常量DEFAULT_PORT 和字符串常量algorithm,该类还包括main()方法,在该方法中使用SSL 确保订单的安全。

2.编写useSecureOrderTaker 类,代码如下:

import java.net.*;
import java.io.*;
import java.util.*;
import java.security.*;
import javax.net.ssl.*;
import javax.net.*;
import com.sun.net.ssl.*;
public class useSecureOrderTaker
{
	//定义常量
  	public final static int DEFAULT_PORT = 7000;
  	public final static String algorithm = "SSLv3";
  	public static void main(String[] args)
  	{
    		int port = DEFAULT_PORT;
    		if (args.length > 0)
    		{
      			try
      			{
        			port = Integer.parseInt(args[0]);
        			if (port < 0 || port >= 65536)
        			{
          				System.out.println("Port must between 0 and 65535");
          				return;
        			}
      			}
      			catch (NumberFormatException e) {}
    		}
    		try
    		{
      			SSLContext context = SSLContext.getInstance("SSL");
      			// 实现仅支持X.509关键字
      			KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
      			// Sun的缺省关键字存储
      			KeyStore ks = KeyStore.getInstance("JKS");
      			char[] password = "2andnotafnord".toCharArray();
      			ks.load(new FileInputStream("jnp2e19.keys"), password);
      			kmf.init(ks, password);
      			//context初始化
      			context.init(kmf.getKeyManagers(), null, null);
			//构造SSLServerSocketFactory类
      			SSLServerSocketFactory factory
       			= context.getServerSocketFactory();
     			//构造SSLServerSocket类
      			SSLServerSocket server
       			= (SSLServerSocket) factory.createServerSocket(port);
      			String[] supported = server.getSupportedCipherSuites();
      			String[] anonCipherSuitesSupported = new String[supported.length];
      			int numAnonCipherSuitesSupported = 0;
      			for (int i = 0; i < supported.length; i++)
      			{
        			if (supported[i].indexOf("_anon_") > 0)
        			{
          				anonCipherSuitesSupported[numAnonCipherSuitesSupported++] = supported[i];
        			}
      			}
      			String[] oldEnabled = server.getEnabledCipherSuites();
      			String[] newEnabled = new String[oldEnabled.length
       			+ numAnonCipherSuitesSupported];
       			//字符串复制
      			System.arraycopy(oldEnabled, 0, newEnabled, 0, oldEnabled.length);
      			System.arraycopy(anonCipherSuitesSupported, 0, newEnabled,
       			oldEnabled.length, numAnonCipherSuitesSupported);
      			server.setEnabledCipherSuites(newEnabled);
      			// 准备工作完成,开始实际通信
      			try
      			{
        			while (true)
        			{
          				// 此socket是安全的但在代码里面没有显示T
          				Socket theConnection = server.accept();
          				//输入流
          				InputStream in = theConnection.getInputStream();
          				int c;
          				while ((c = in.read()) != -1)
          				{
            					System.out.write(c);
          				}
          				theConnection.close();
        			}  // end while
      			} // end try
      			catch (IOException e)
      			{
        			System.err.println(e);
      			} // end catch
   		}  // end try
   		catch (IOException e)
   		{
     			e.printStackTrace();
   		} // end catch
   		catch (KeyManagementException e)
   		{
     			e.printStackTrace();
   		} // end catch
   		catch (KeyStoreException e)
   		{
     			e.printStackTrace();
   		} // end catch
   		catch (NoSuchAlgorithmException e)
   		{
     			e.printStackTrace();
   		} // end catch
   		catch (java.security.cert.CertificateException e)
   		{
     			e.printStackTrace();
   		} // end catch
   		catch (UnrecoverableKeyException e)
   		{
     			e.printStackTrace();
   		} // end catch
  	} // end main
} // end server

    相关声明:

      若“Java使用SSL 确保订单的安全”有损您的权益,请告之我们删除内容。
      部分文章来源于网络,版权归原作者所有。