`

JavaGUI应用程序部署

阅读更多

JavaGUI应用程序部署


JavaGUI程序发布分类

 1)  Applet:可以嵌入到浏览器中,通过网页的方式展示给用户

 2)  application :有两种发布方式

  ü 打包成jar包通过bat的方式运行,或者通过第三方软件打成exe(后续会再详细介绍)

  ü 通过Java Web Start的方式发布到服务器端,通过JNLP运行

 相对来说第二种方式可能更好一些,免除了更新的麻烦。

 用applet或者jws的方式发布,大部分都需要数字签名。



为什么要签名

 其实签名不是必须的,如果你的程序只是单纯的绘图,显示,只要不访问网络资源也不访问本地文件,是不用签名的,
 但是如果要访问本地或网上资源就必须签名,
 比如读取本地文件或者访问数据库,这是由java的沙箱机制决定的,即jvm内部有一组安全检查规则,要通过检查之后才能访问特定资源。

 如果要突破这个规则,可以有两个方法:

 1) 修改jre权限文件如下

  java.policy为grant {
   permission java.security.AllPermission;
        };

  一般权限文件的目录如下C:"Program Files"Java"jre6"lib"security

  但是修改每个客户端的权限文件,无论从时间还是操作上都是很麻烦的。

 2)  签名,意思就是告诉用户,这个程序是谁发布的,是不是能信任,如果客户确定,ok,这个applet或者jws就可以访问外部资源了。


如何签名

 1)首先确保你已经完全安装了Java2的环境,有keytool工具,它位于JDK的bin目录下。这一般不会有问题。

 2)到Dos状态下,进入你需发布应用程序的jar包所在的目录,运行下面这句话
   keytool -genkey -keystore myKeystore -alias jwstest -validity 1000
      它将会提示你输入用户名、密码等,按照提示随便输入即可,不输入直接回车即可,
   但一定要记住密码。运行结束它将会在当前路径下创建名为myKeystore的文件。

 3)如果你想查看一下刚才生成的myKeystore文件的内容,可以使用下面这句话:
  keytool -list -keystore myKeystore
  显示出来应该类似如下:
  Keystore type: jks
  Keystore provider: SUN
  Your keystore contains 1 entry:
  jwstest, Tue Nov 23 19:29:32 PST 2001, keyEntry,
  Certificate fingerprint (Test):
  C3:A9:CD:F3:D3:AC:4D:3F:3C:5B:AF:9E:CF:0D:46:5C

 4)对你需发布应用程序的jar包进行签名,运行下面这句话:
  jarsigner -keystore myKeystore yourtest.jar jwstest
  其中yourtest.jar是你的jar包名,你需要修改它,别的就不必修改了。
  运行时会提示你输入密码,就是你刚才在生成myKeystore文件时设定的密码。



如果有很多jar包怎么办

 在开发的过程中很可能会引用到第三方的jar包,而第三方的jar包又可能引用到其它的,所以可能有很多的jar包,需要和applet一起发布,有两个方法
  1) 分别打包签名,使用于包比较少,比如只有3、4个的情况
        2) 只 把applet的jar包签名,让用户确认访问授权,applet已经被用户授权,那么就可以在applet里改变安全管理器(SecurityManager)
   只需要继承SecurityManager类,创建自己的安全管理器类,然后覆盖checkPermission方法,允许访问任何资源。
   在applet的init方法中调用System.setSecurityManager把安全管理器设置为我们自定义的即可。


 class CustomManager extends SecurityManager {
  public void checkPermission(Permission perm, Object context) {
  }
  public void checkPermission(Permission perm) {
  }
 }
 

其它一些相关资料如下

 JDK中keytool常用命令

 -genkey      在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书
 -alias       产生别名
 -keystore    指定密钥库的名称(产生的各类信息将不在.keystore文件中
 -keyalg      指定密钥的算法   
 -validity    指定创建的证书有效期多少天
 -keysize     指定密钥长度
 -storepass   指定密钥库的密码
 -keypass     指定别名条目的密码
 -dname       指定证书拥有者信息 例如:  "CN=sagely,OU=atr,O=szu,L=sz,ST=gd,C=cn"
 -list        显示密钥库中的证书信息      keytool -list -v -keystore sage -storepass ....
 -v           显示密钥库中的证书详细信息
 -export      将别名指定的证书导出到文件  keytool -export -alias caroot -file caroot.crt
 -file        参数指定导出到文件的文件名
 -delete      删除密钥库中某条目          keytool -delete -alias sage -keystore sage
 -keypasswd   修改密钥库中指定条目口令    keytool -keypasswd -alias sage -keypass .... -new .... -storepass ... -keystore sage
 -import      将已签名数字证书导入密钥库  keytool -import -alias sage -keystore sagely -file sagely.crt
     导入已签名数字证书用keytool -list -v 以后可以明显发现多了认证链长度,并且把整个CA链全部打印出来。

 Keytool 是安全钥匙与证书的管理工具.它管理一个存储了私有钥匙和验证相应公共钥匙的与它们相关联的X.509 证书链的keystore(相当一个数据库).

 Keytool 是一个有效的安全钥匙和证书的管理工具. 它能够使用户使用数字签名来管理他们自己的私有/公共钥匙对,管理用来作自我鉴定的相关的证书,管理数据完整性和鉴定服务.它还能使用户在通信时缓存它们的公共钥匙.

 一个证书是某一实体(个人,公司等)的数字签名,指出其他实体的公共钥匙(或其他信息)的详细的值.当数据被签名后,这个签名信息被用来检验数据的完整性和真实性.完整性指数据没有被修改和篡改,真实性指数据从任何产生和签名的一方真正的传输到达.

 Keytool 把钥匙和证书储存到一个keystore.默任的实现keystore的是一个文件.它用一个密码保护钥匙.

 而另外的一个工具jarsigner用keystore中的信息产生或检验Java aRchive(jar文件)中的数字签名.

 Keystore有两个不同的入口:

 1.钥匙入口:保存了非常敏感的加密的钥匙信息,并且是用一个保护的格式存储以防止未被授权的访问.以这种形式存储的钥匙是秘密钥匙,或是一个对应证书链中公有钥匙的私有钥匙.

 2.信任证书入口:包含一个属于其他部分的单一公共钥匙证书.它之所以被称为"信任证书",是因为keystore信任的证书中的公共钥匙真正属于证书所有者的身份识别.

 Keystore的别名:

 所有的keystore入口(钥匙和信任证书入口)是通过唯一的别名访问.别名是 不区分大小写的.如别名Hugo和hugo指向同一个keystore入口.

 可以在加一个入口到keystore的时候使用-genkey参数来产生一个钥匙对(公共钥匙和私有钥匙)时指定别名.也可以用-import参数加一个证书或证书链到信任证书.

 如:

 keytool -genkey -alias duke -keypass dukekeypasswd

 其中duke为别名,dukekeypasswd为duke别名的密码.这行命令的作用是产生一个新的公共/私有钥匙对.

 假如你想修改密码,可以用:

 keytool -keypasswd -alias duke -keypass dukekeypasswd -new newpass

 将旧密码dukekeypasswd改为newpass.

 Keystore的产生:

 1.当使用-genkey 或-import或-identitydb命令添加数据到一个keystore,而当这个keystore不存在时,产生一个keystore.默认名是.keystore,存放到user-home目录.

 2.当用-keystore指定时,将产生指定的keystore.

 Keystore的实现:

 Keytool 类位于java.security包下,提供一个非常好的接口去取得和修改一个keystore中的信息. 目前有两个命令行:keytool和jarsinger,一个GUI工具Policy 可以实现keystore.由于keystore是公开的,用户可以用它写一些额外的安全应用程序.

 Keystore还有一个sun公司提供的內在实现.它把keystore作为一个文件来实现.利用了一个keystore类型(格式)"JKS".它用单独的密码保护每一个私有钥匙.也用可能不同的密码保护整个keystore的完整性.

 支持的算法和钥匙大小:

 keytool允许用户指定钥匙对和注册密码服务供应者所提供的签名算法.缺省的钥匙对产生算法是"DSA".假如私有钥匙是"DSA"类型,缺省签名算法是"SHA1withDSA",假如私有钥匙是"RSA"类型,缺省算法是"MD5withRSA".

 当产生一个DSA钥匙对,钥匙必须在512-1024位之间.对任何算法的缺省钥匙大小是1024位.

 证书:

 一个证书是一个实体的数字签名,指出其他实体的公共钥匙有明确的值.

 1.公共钥匙 :是同一个详细的实体的数字关联,并有意让所有想同这个实体发生信任关系的其他实体知道.公共钥匙用来检验签名;

 2.数字签名:假如数据已被签名,并用身份存储在一个实体中,一个签名能够证明这个实体知道这个数据.这个数据用实体私有钥匙签名并递交;

 3.身份:知道实体的方法.在一些系统中身份是公共钥匙,其他系统中可以是从一个X.509名字的邮件地址的Unix UID来的任何东西;

 4.签名:一个签名用用实体私有钥匙来计算某些加密数据;

 5.私有钥匙:是一些数字,每一个私有钥匙只能被特定的拥有该私有钥匙的实体知道.私有和公共钥匙存在所有用公共钥匙加密的系统的钥匙对中.一个公共钥匙加密(如DSA),一个私有钥匙与一个正确的公共钥匙通信.私有钥匙用来计算签名.

 6.实体:一个实体可以是一个人,一个组织,一个程序,一台计算机,一个商业,一个银行,或其他你想信任的东西.

 Keytool应用实例:

 1.产生一个keystore:

 keytool -genkey -alias User(keystore的别名) -keyalg RSA -validity 7 -keystore keystore(指定keystore).

 运行这个命令,系统提示:

 Enter keystore password:yourpassword(输入密码)

 What is your first and last name?

 [Unknown]: your name(输入你的名字)

 What is the name of your organizational unit?

 [Unknown]:your organizational(输入你所在组织单位的名字)

 What is the name of your organization?

 [Unknown]:your organization name (输入你所在组织的名字)

 What is the name of your City or Locality?

 [Unknown]:your city name(输入所在城市的名字)

 What is the name of your State or Province?

 [Unknown]:your provice name(输入所在省份名字)

 What is the two-letter country code for this unit?

 [Unknown]:cn(输入国家名字)

 Is CN=your name, OU=your organizaion, O="your organization name",

 L=your city name, ST=your province name, C=cn correct?

 [no]: yes

 2.检查一个keystore:

 keytool -list -v -keystore keystore

 Enter keystore password:your password(输入密码)

 将显示keystore內容如:

 Keystore type: jks

 Keystore provider: SUN

 Your keystore contains 1 entry

 Alias name: yourname

 Creation date: Dec 20, 2001

 Entry type: keyEntry

 Certificate chain length: 1

 Certificate[1]:

 Owner: CN=yourname, OU=your organization, O="your organization name",

 L=your city name, ST=your province name, C=CN

 Issuer: CN=Duke, OU=Java Software, O="Sun Microsystems, Inc.", L=Palo Alto, ST=CA, C=US

 Serial number: 3c22adc1

 Valid from: Thu Dec 20 19:34:25 PST 2001 until: Thu Dec 27 19:34:25 PST 2001

 Certificate fingerprints:

 MD5: F1:5B:9B:A1:F7:16:CF:25:CF:F4:FF:35:3F:4C:9C:F0

 SHA1: B2:00:50:DD:B6:CC:35:66:21:45:0F:96:AA:AF:6A:3D:E4:03:7C:74

 3.输出keystore到一个文件:testkey:

 keytool -export -alias duke -keystore keystore -rfc -file testkey

 系统输出:

 Enter keystore password:your password(输入密码)

 Certificate stored in file < td>

 4.输入证书到一个新的truststore:

 keytool -import -alias dukecert -file testkey -keystore truststore

 Enter keystore password:your new password.(输入truststore新密码)

 5.检查truststore:

 keytool -list -v -keystore truststore

 系统将显示truststore的信息.

 现在可以用适当的keystore运行你的应用程序.如:

 java -Djavax.net.ssl.keyStore=keystore -Djavax.net.ssl.keyStorePassword=password Server

 和: java -Djavax.net.ssl.trustStore=truststore

 -Djavax.net.ssl.trustStorePassword=trustword Client

分享到:
评论

相关推荐

    MATLAB 到 JAVA 应用程序。 (大数据和机器学习):从 MATLAB 部署到 JAVA 应用程序(大数据和机器学习)-matlab开发

    假设您想要一个 JAVA 应用程序能够从您的历史数据中训练机器学习模型并预测新数据的结果,您如何实现从 MATLAB 启动的应用程序? 在这个例子中,它演示了我如何在 JAVA 应用程序中实现我的 MATLAB 脚本(使用 Tall...

    一款利用 JDK 模块化的特性帮你把 jar 打包成独立 exe 的工具,它支持 GUI 和控制台应用程序的创建

    ExeBuilder 是一款利用 JDK 模块化的特性帮你把 jar 打包成独立 exe 的工具,它支持 GUI 和控制台应用程序的创建

    JClass DesktopViews-专业的JAVA开发工具套件

    摘要 JClass DesktopViews 是一个集成Java组件的集合,帮助开发者快速有效的在客户端建立企业级应用程序,通过预建立,预测试以及专业的质量水准,加速了开发进程,改善了编码质量。同时还提供了一系列高级GUI功能,...

    corejava.zip

    适用于使用Java核心卷一的同学。官方下载工具。 Java领域有影响力和价值的著作之一,由拥有20多年教学...第13章介绍如何将程序部署为应用或applet;第14章讨论并发。本书后还有一个附录,其中列出了Java语言的保留字。

    JAVA上百实例源码以及开源项目

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    JAVA上百实例源码以及开源项目源代码

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    Java开发技术大全(500个源代码).

    HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 ...

    Java Server Faces编程

    书中首先对度层和相关技术进行了综述,接着介绍了如何编写并部署JSF应用程序,然后是各个主题的详尽指导,包括如何使用标准GUI组件、输入验证和转换器,如何控制页面导航、管理Javabean和编写事件监听器。...

    火车抢票java源码-support-ticket-classification:构建一个应用程序,使用IBMWatsonNaturalLan

    应用程序,该应用程序利用 NLC 模型将消费者投诉支持票文本的集合分类为各种类别。 将 Watson Developer Cloud SDK 用于 nodejs。 流 用户与自然语言分类器 (NLC) GUI 交互以训练模型。 加载到 NLC 服务进行训练。 ...

    java开源包6

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包11

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包9

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包5

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    Java核心技术卷一基础知识第10版

    ava领域*有影响力和价值的著作之一,由拥有20多年教学与研究经验的资深Java技术专家撰写(获Jolt大奖)...第13章介绍如何将程序部署为应用或applet;第14章讨论并发。本书最后还有一个附录,其中列出了Java语言的保留字。

    java api 1.6 中文版

    2、在服务器桌面上运行得更快的应用程序 3、新的动态连接'简化故障诊断 4、扩大的Solaris DTrace的支持提供了额外的价值在Solaris 5、改进的'native'的外观设计风格,Solaris操作系统,Linux和Windows 6、第一个...

    java核心技术卷Ⅰ (高清中文版)

    第10章讲解如何部署自己的应用程序或applet;第11章讨论异常处理;第12章概要介绍泛型程序设计;第13章讲解Java平台的集合框架;第14章介绍了多线程。本书最后还有一个附录,其中列出了Java语言的保留字。

    java开源包101

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包4

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包8

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包10

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

Global site tag (gtag.js) - Google Analytics