一般的 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 连接了。
分享到:
相关推荐
在提供的标题和描述中,我们关注到两个关键概念:Applet和Socket,它们都是Java编程中的重要组成部分。 **Applet** 是Java的一个特性,它允许开发者创建可以在网页中运行的小程序。在Web的早期,Applet常用于增强...
JavaApplet是Java技术在早期Web开发中的一种重要应用,它允许开发者创建可以在网页中运行的小型程序。这些小程序能够增强交互性,提供动态内容,比如游戏、图表、动画等。JavaApplet运行在用户的浏览器上,由Java ...
### JavaApplet与JavaScript #### 6.1 JavaApplet ##### 6.1.1 JavaApplet概述 **Applet 类层次结构:** JavaApplet 的基础是 `java.applet.Applet` 类,它是从 `java.awt.Panel` 继承而来的一个特殊的图形组件。...
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编程中的两种主要程序类型,它们各自拥有独特的特性和用途。Java Application是一种独立运行的应用程序,而Java ...
### Java Application与Java Applet的区别 #### 一、概述 Java是一种广泛使用的编程语言,它以其平台无关性和安全性而著称。在Java中,有两种主要的应用类型:Java Application(Java应用程序)和Java Applet...
Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者创建可以在浏览器中运行的小型应用程序。在这个“简单的java applet图像移动重画实例”中,我们将深入探讨Java Applet的基础知识,以及如何实现...
Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者在浏览器中嵌入可执行的小程序,为用户提供动态交互的Web页面体验。这个简单的案例将带你深入理解Java Applet的基础概念、工作原理以及如何创建和...
Java Applet 是Java技术在早期Web开发中的一种应用方式,它允许开发者创建可以在网页中运行的小型程序。这个入门教程将带你了解Java Applet的基本概念、工作原理以及如何编写和部署。 1. **Java Applet简介** - ...
Java Applet是Java技术早期的一种应用方式,它允许在网页中嵌入小型的Java程序,让用户可以直接在浏览器中运行。这个"javaApplet学习简单例子"是一个关于计算贷款利率的实例,非常适合初学者理解Java Applet的工作...
Java Applet是Java的一种早期应用形式,主要用于在Web浏览器中执行小型Java程序,提供动态交互体验。本项目“Java applet制作聊天室”利用Java Applet技术构建了一个在线聊天平台,用户可以在网页上进行实时的多人或...
Java Applet程序设计是Java语言在Web环境中的早期应用,它允许开发者创建可以在浏览器中运行的小型应用程序。Applet能够嵌入HTML页面中,提供动态交互功能,如动画、图像处理、用户输入处理等。本篇文章将深入探讨...
Java的线程和Java Applet是Java编程中的两个重要概念,它们分别涉及并发执行和Web应用程序的执行环境。 **线程**在Java中是程序执行的最小单元,它允许程序在同一时间执行多个任务。Java内置对多线程的支持,使得...
Java Applet是Java技术在Web浏览器中运行的一种小程序,它为网页添加了交互性和动态性。本教程将探讨如何在Java Applet中实现动画效果,让网页内容更加生动有趣。 首先,理解动画的基本原理至关重要。动画是通过...
由于Java Applet与MFC程序使用的字节顺序不同(前者为Big-Endian,后者为Little-Endian),需要在数据交换过程中进行转换。这一过程由`Swap`函数完成。例如,数字“4”在Big-Endian格式中表示为“0004”,而在Little...
Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者创建可以在用户浏览器上运行的小型程序。本实例讲解将围绕Java Applet的基本概念、工作原理以及如何通过提供的类文件进行理解和学习。 1. **Java...
在Java Applet中实现服务器推,通常会利用Socket编程或者持久连接(Persistent Connections)。Applet在客户端运行,可以创建一个到服务器的Socket连接,保持这个连接的打开状态,以便服务器可以在有新数据时立即...
Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者创建可以在浏览器中运行的小型应用程序。这个"Java Applet实例编程"很可能是包含了一系列的Java Applet编程示例,帮助学习者理解如何利用Java ...
Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者创建可以在浏览器中运行的小型应用程序。Applet的概念源自于90年代中期,当时Web页面主要由静态HTML构成,而Java Applet的出现为网页带来了交互性...