`
muscle-liu
  • 浏览: 230461 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java Applet 中的 Socket 与 SSLSocet

阅读更多
一般的 socket 应用:
server:
ServerSocket serverSocket = new ServerSocket(portNumber);

client:
Socket socket = new Socket(serverName, portNumber);


对于 Java Applet 中的 socket 应用,一般只要对代码进行签名,自己产生证书安装就可以了。主要用到 Java 里边的的keytool 和 jarsigner:
jar cfv Test.jar com/test/*.class

keytool -genkey -alias signFiles -keystore testAPI -keypass pds12345 -storepass 12345678 -dname CN=1,OU=1,O=1,L=1,ST=1,C=1

jarsigner -keystore testAPI -storepass 12345678 -keypass 12345678 -signedjar TestSigned.jar Test.jar signFiles

keytool -export -keystore agentAPI -storepass 12345678 -alias signFiles -file testApplet.cer

keytool -import -alias testAPI -file testApplet.cer -keystore testAPI -storepass 12345678 



但对于 SSLSoket 要求 server 端与 client 端有可以互解的密钥库。先是利用 Java keytool -genkey 产生一个加密密钥库用于server端,然后利用 keytool -export 产生出证书。而在 client 端利用 keytool -import 与 证书产生一个解密密钥库。如何创建SSLSocket有多种方法,下边是参考网上的方法:
server:
            ClassLoader cl = getClass().getClassLoader(); 
            String key = "serverKeyStore";//加密密钥库
            fIn = cl.getResourceAsStream("serverKey"); 
            
            char keyStorePass[] = "12345678".toCharArray(); 

            char keyPassword[] = "12345678".toCharArray(); 

            KeyStore ks = KeyStore.getInstance("JKS"); 

            ks.load(fIn, keyStorePass);            

            KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");

            kmf.init(ks, keyPassword);

            SSLContext sslContext = SSLContext.getInstance("SSLv3");

            sslContext.init(kmf.getKeyManagers(), null, null);

            SSLServerSocketFactory factory = sslContext.getServerSocketFactory();

            serverSocket = (SSLServerSocket) factory.createServerSocket(portNumber);
...............


client:
String path = System.getProperty("java.home")
        	+ "/lib/security/KeyStore".replace('/', File.separatorChar);

System.setProperty("javax.net.ssl.trustStorePassword","12345678");
System.setProperty("javax.net.ssl.trustStore",path);
factory = (SSLSocketFactory)SSLSocketFactory.getDefault();
sslsocket = (SSLSocket)factory.createSocket(serverName, portNumber);
...............


当读取读取解密密钥库的路径不正确时,就会出现 java.lang.NullPointerException .

且而 Applet client 读取解密密钥库时,解密密钥库一定要在 client端的本地上(我做的一个web应用开始时想把解密密钥库KeyStore放在server端,装载applet时再读取,可惜行不通)。否则会有如下的 exception (PS:参考http://forums.sun.com/thread.jspa?threadID=580496)
:
javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty



上述的操作都正确,但是运行时还出现如下 exception:
 java.security.AccessControlException: access denied


这时我们可以在 java.policy 文件上添加相应的grant(网上一般都介绍用此方法), 或者用AccessController.doPrivileged:
引用

doPrivileged()能在运行时启用特权,执行指定的操作。如果使用doPrivileged(),就会用到被简化的决策程序。一般用到doPrivileged()方法的时候,也会使用到PrivilegedAction界面,这个界面不会产生异常。

AccessController.doPrivileged(new PrivilegedAction() {
      Public Object run() {
            // privileged action can return some value or null
      } }
);

把上边开 socket 的代码放在 run() 方法里执行,就可以实现 SSL 连接了。
2
1
分享到:
评论

相关推荐

    java 实验代码包括applet,socket

    在提供的标题和描述中,我们关注到两个关键概念:Applet和Socket,它们都是Java编程中的重要组成部分。 **Applet** 是Java的一个特性,它允许开发者创建可以在网页中运行的小程序。在Web的早期,Applet常用于增强...

    JavaApplet_javaapplet小程序_java_

    JavaApplet是Java技术在早期Web开发中的一种重要应用,它允许开发者创建可以在网页中运行的小型程序。这些小程序能够增强交互性,提供动态内容,比如游戏、图表、动画等。JavaApplet运行在用户的浏览器上,由Java ...

    JavaApplet与JavaScript

    ### JavaApplet与JavaScript #### 6.1 JavaApplet ##### 6.1.1 JavaApplet概述 **Applet 类层次结构:** JavaApplet 的基础是 `java.applet.Applet` 类,它是从 `java.awt.Panel` 继承而来的一个特殊的图形组件。...

    JavaApplet实例及教程

    Java+Applet实例讲解(分为1和2两部分)、Java+Applet实例编程、java+Applet登录、JavaApplet教程.pdf、JAVA_applet应用实例.ppt、JavaApplet编程技巧实例专辑、javaapplet例子.doc、Applet类.doc等教程。...

    java Application与java Applet的区别

    Java Application与Java Applet的区别详解 一、概念解析 Java Application和Java Applet是Java编程中的两种主要程序类型,它们各自拥有独特的特性和用途。Java Application是一种独立运行的应用程序,而Java ...

    javaapplication和javaapplet的区别

    ### Java Application与Java Applet的区别 #### 一、概述 Java是一种广泛使用的编程语言,它以其平台无关性和安全性而著称。在Java中,有两种主要的应用类型:Java Application(Java应用程序)和Java Applet...

    简单的java applet图像移动重画实例

    Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者创建可以在浏览器中运行的小型应用程序。在这个“简单的java applet图像移动重画实例”中,我们将深入探讨Java Applet的基础知识,以及如何实现...

    java applet 简单案例

    Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者在浏览器中嵌入可执行的小程序,为用户提供动态交互的Web页面体验。这个简单的案例将带你深入理解Java Applet的基础概念、工作原理以及如何创建和...

    Java Applet 入门教程

    Java Applet 是Java技术在早期Web开发中的一种应用方式,它允许开发者创建可以在网页中运行的小型程序。这个入门教程将带你了解Java Applet的基本概念、工作原理以及如何编写和部署。 1. **Java Applet简介** - ...

    javaApplet学习简单例子

    Java Applet是Java技术早期的一种应用方式,它允许在网页中嵌入小型的Java程序,让用户可以直接在浏览器中运行。这个"javaApplet学习简单例子"是一个关于计算贷款利率的实例,非常适合初学者理解Java Applet的工作...

    Java applet制作聊天室

    Java Applet是Java的一种早期应用形式,主要用于在Web浏览器中执行小型Java程序,提供动态交互体验。本项目“Java applet制作聊天室”利用Java Applet技术构建了一个在线聊天平台,用户可以在网页上进行实时的多人或...

    Java applet程序设计

    Java Applet程序设计是Java语言在Web环境中的早期应用,它允许开发者创建可以在浏览器中运行的小型应用程序。Applet能够嵌入HTML页面中,提供动态交互功能,如动画、图像处理、用户输入处理等。本篇文章将深入探讨...

    Java的线程和Java AppletJava的线程和Java AppletJava的线程和Java Applet

    Java的线程和Java Applet是Java编程中的两个重要概念,它们分别涉及并发执行和Web应用程序的执行环境。 **线程**在Java中是程序执行的最小单元,它允许程序在同一时间执行多个任务。Java内置对多线程的支持,使得...

    在Java Applet中实现动画.rar_applet_java Applet

    Java Applet是Java技术在Web浏览器中运行的一种小程序,它为网页添加了交互性和动态性。本教程将探讨如何在Java Applet中实现动画效果,让网页内容更加生动有趣。 首先,理解动画的基本原理至关重要。动画是通过...

    一种在JavaApplet和MFC程序间交换数据的方法

    由于Java Applet与MFC程序使用的字节顺序不同(前者为Big-Endian,后者为Little-Endian),需要在数据交换过程中进行转换。这一过程由`Swap`函数完成。例如,数字“4”在Big-Endian格式中表示为“0004”,而在Little...

    javaapplet实例讲解

    Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者创建可以在用户浏览器上运行的小型程序。本实例讲解将围绕Java Applet的基本概念、工作原理以及如何通过提供的类文件进行理解和学习。 1. **Java...

    用java applet方式实现服务器推技术

    在Java Applet中实现服务器推,通常会利用Socket编程或者持久连接(Persistent Connections)。Applet在客户端运行,可以创建一个到服务器的Socket连接,保持这个连接的打开状态,以便服务器可以在有新数据时立即...

    Java Applet实例编程

    Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者创建可以在浏览器中运行的小型应用程序。这个"Java Applet实例编程"很可能是包含了一系列的Java Applet编程示例,帮助学习者理解如何利用Java ...

    Java Applet

    Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者创建可以在浏览器中运行的小型应用程序。Applet的概念源自于90年代中期,当时Web页面主要由静态HTML构成,而Java Applet的出现为网页带来了交互性...

Global site tag (gtag.js) - Google Analytics