数字签名与数字证书

关于数字签名的介绍可以参考以上这篇。

这里稍微说一下不对称加密的方式:

用公钥加密的内容只能用私钥解密,用私钥加密的内容只能用公钥解密。

这样比对称加密更安全

Java 中数字签名的方式

跟普通文本加密的原理是一样的。

Java 数字签名和数字证书的作用

毋庸置疑,这些都是为了安全性而考虑的。

比如对于applet 来说,它可以保护用户(客户端) 文件和私人数据不被恶意的程序或病毒感染和破坏,鉴别代码提供者的身份。对于开发者而言,通过使用API方法,能够将安全性功能集成到应用程序中,因为API的体系结构能够定义和集成对特定的资源的使用权限、加密、 安全性管理、策略管理,并提供了一些类来管理公钥/密钥对及信任用户群的公钥证书。同时系统管理员、开发者和用户可以使用它提供的工具管理钥匙库,在 JAR文件中生成数字签名、签名的完整性检测、创建和修改策略文件

来看一下 1个Applet 的开发和运行的过程:

在代码的分发端: 
(1)开发Java源程序并对其进行编译。 
(2)用JAR工具对类文件和资源文件进行封装。 
(3)用keytool创建公钥和密钥,生成X。509V1签名证书,输出证书。 
(4)通过jarsigner工具用生成的密钥对JAR文件进行数字签名。

在代码的接收端: 
(1)用keytool输入证书视其为可信任。 
(2)用policytool创建和修改安全性策略配置文件,授权请求的访问权限。 
(3)从网络取得字节码,用公钥验证数字签名证书和文档代码的完整性。 
(4)验证字节码的合法性,根据策略文件分配相应权限。 
(5)执行代码,完成后被垃圾回收器回收内存。

在用公钥验证数字签名证书之前,接收方需要确认公钥自身的可靠性,因此通常情况是提供一个包含公钥的证书而不是公钥自身。1个证书包括:
(1)1个公钥。 
(2)1个唯一的名字实体(个人或公司),它是证书的所有者,包含用户名字、公司、组织、城市、地址、国家代码、省份等信息。 
(3)数字签名:1个证书被1个分发者的实体签名,保证证书确实包含另1个实体(所有者)的公钥。 
(4)分发者的标识名信息。

Applet 开发的实例步骤,

在服务端:

1. 开发完代码, 使用jar 或其他方式达成 XX.jar 档;

2. 为 jar 档创建 keystore 和keys.

.keystore 使用来存放密钥和公钥的文件

keytool -genkey -keystore XX.keystore –alias XX

这里会输入一堆的设定信息

3. 使用产生的密钥对 jar 档进行签名

jarsigner -keystore XX.keystore XX.jar XX

4. 将公钥导入到一个cer 文件中,这个文件会被导入到客户端

keytool -export -keystore XX.keystore -alias XX -file XX.cer

接着这些文件 XX.jar;XX.keystore; XX.cer 放入服务端的目录下。

在客户端:

1. 将服务端生成的 XX.cer 导入到jre 的 lib\security 下。

2. 将公钥导入到 cacerts

keytool -import -alias XX -file XX.cer  -keystore cacerts

这儿要你输入的是cacerts的密码,应该是changeit

3. 修改policy策略文件,在dos状态下使用命令 policytool

Java 数字签名原理及产生的更多相关文章

  1. 一个基于RSA算法的Java数字签名例子

    原文地址:一个基于RSA算法的Java数字签名例子 一.前言: 网络数据安全包括数据的本身的安全性.数据的完整性(防止篡改).数据来源的不可否认性等要素.对数据采用加密算法加密可以保证数据本身的安全性 ...

  2. [JavaEE]Java NIO原理图文分析及代码实现

    转http://weixiaolu.iteye.com/blog/1479656 目录: 一.java NIO 和阻塞I/O的区别      1. 阻塞I/O通信模型      2. java NIO ...

  3. JAVA监听器原理

    http://blog.csdn.net/longyulu/article/details/25054697 JAVA监听器原理 标签: 监听器 2014-05-05 15:40 9070人阅读 评论 ...

  4. Java NIO原理分析

    Java IO 在Client/Server模型中,Server往往需要同时处理大量来自Client的访问请求,因此Server端需采用支持高并发访问的架构.一种简单而又直接的解决方案是“one-th ...

  5. Java跨平台原理

    此篇博文主要源自网络xiaozhen的天空的博客:http://xiaozhen1900.blog.163.com/blog/static/1741732572011325111945246/ 1.是 ...

  6. 【转】Java跨平台原理

    原文地址:http://www.cnblogs.com/gw811/archive/2012/09/09/2677386.html 1.是么是平台 Java是可以跨平台的编程语言,那我们首先得知道什么 ...

  7. 《Java虚拟机原理图解》 1.2、class文件里的常量池

    [最新更新:2014/11/11]  了解JVM虚拟机原理 是每个Java程序猿修炼的必经之路. 可是因为JVM虚拟机中有非常多的东西讲述的比較宽泛.在当前接触到的关于JVM虚拟机原理的教程或者博客中 ...

  8. Java NIO原理图文分析及代码实现

    原文: http://weixiaolu.iteye.com/blog/1479656 目录: 一.java NIO 和阻塞I/O的区别      1. 阻塞I/O通信模型      2. java ...

  9. Java编译原理

    http://wenku.baidu.com/view/f9b1734b87c24028915fc3a3.html Java编译原理 1. 关于动态加载机制 学习Java比C++更容易理解OOP的思想 ...

随机推荐

  1. [LOJ #2162]「POI2011」Garbage

    题目大意:给一张$n$个点$m$条边的无向图,每条边是黑色的或白色的,要求变成一个目标颜色.可以从任意一个点开始,走一个简单环,回到开始的点,所经过的边颜色翻转.可以走无数次.问是否有一个方案完成目标 ...

  2. cf 834 E. Ever-Hungry Krakozyabra

    cf 834 E. Ever-Hungry Krakozyabra(爆搜+数位dp) 题意: 定义一种inedible tail为一个数把每一位数字按不降的顺序排列后,去掉前导0组成的序列 比如570 ...

  3. 2017 多校5 Rikka with String

    2017 多校5 Rikka with String(ac自动机+dp) 题意: Yuta has \(n\) \(01\) strings \(s_i\), and he wants to know ...

  4. 基于RRT的机器人自主探索建图

    一.方法讲解: 本项目分为三个部分:机器人周围一定范围内基于RRT的全局检测, 根据上一步检测的未知区域点执行sklearn.cluster.MeanShift聚类,获取聚类中心: 根据聚类中心计算各 ...

  5. Java并发(3)- 聊聊Volatile

    引言 谈到volatile关键字,大多数开发者都有一定了解,可以说是开发者非常熟悉,深入之后又非常陌生的一个关键字.相当于轻量的synchronized,也叫轻量级锁,与synchronized相比性 ...

  6. 洛谷 P2916 [USACO08NOV]为母牛欢呼Cheering up the C…

    题目描述 Farmer John has grown so lazy that he no longer wants to continue maintaining the cow paths tha ...

  7. 玩具谜题(NOIP2016)(纯模拟)

    原题传送门 神奇的题目.. 朝左朝右异或一下就好了 细节处理一下,输出now的字符串 下面贴代码 #include<iostream> #include<cstdio> #in ...

  8. 飞扬的小鸟(NOIP2014)(丧病DP题)

    原题传送门 刚开始我还以为这道题目非常的简单.. 然后随便打了一个DP,直接WA,被zxyer狠狠地D了一顿. 然后发现有好多细节.. 首先假如某横坐标没有管子,那么l[x]=0;h[x]=m+1; ...

  9. Java中UML图

    原文出处:http://blog.sina.com.cn/s/blog_7b3a17130100r95y.html 类(Class) 类(图A)是对象的蓝图,其中包含3个组成部分.第一个是Java中定 ...

  10. android hook 框架 ADBI 如何实现so函数挂钩

    上一篇 android 5 HOOK 技术研究之 ADBI 项目 02 分析了hijack.c, 这个文件编译为一个可执行程序 hijack, 该程序实现了向目标进程注入一个动态库的功能.这一篇继续研 ...