- 浏览: 1318116 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (471)
- 原创文章 (4)
- Database (84)
- J2SE (63)
- Web (26)
- Javascript (30)
- Lucene (11)
- os (13)
- 算法 (8)
- Webservice (1)
- Open projects (18)
- Hibernate (18)
- Spring (15)
- Css (2)
- J2ee (2)
- 综合技术 (18)
- 安全管理 (13)
- PatternsInJava (27)
- NIO (5)
- Ibatis (2)
- 书籍收藏 (1)
- quartz (7)
- 并发编程 (15)
- oracle问题 (2)
- ios (60)
- coco2d-iphone (3)
- C++ (6)
- Zookeeper (2)
- golang (4)
- animation (2)
- android (1)
最新评论
-
dandingge123:
【引用】限制UITextField输入长度的方法 -
qja:
...
对List顺序,逆序,随机排列实例代码 -
安静听歌:
现在在搞这个,,,,,哎~头都大了,,,又freemarker ...
通用大型网站页面静态化解决方案(一) -
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
Quartz 配置参考 -
马清天:
[b][/b][list][*]引用[u][/u][/list ...
通用大型网站页面静态化解决方案(一)
预先了解RSA加密算法。
在构建Java代码实现前,我们需要完成证书的制作。
1.生成keyStroe文件
在命令行下执行以下命令:
keytool -genkey -validity 36000 -alias www.zlex.org -keyalg RSA -keystore d:\zlex.keystore
其中
-genkey表示生成密钥
-validity指定证书有效期,这里是36000天
-alias指定别名,这里是www.zlex.org
-keyalg指定算法,这里是RSA
-keystore指定存储位置,这里是d:\zlex.keystore
在这里我使用的密码为 123456
控制台输出:
Console代码
输入keystore密码: 再次输入新密码: 您的名字与姓氏是什么? [Unknown]: www.zlex.org 您的组织单位名称是什么? [Unknown]: zlex 您的组织名称是什么? [Unknown]: zlex 您所在的城市或区域名称是什么? [Unknown]: BJ 您所在的州或省份名称是什么? [Unknown]: BJ 该单位的两字母国家代码是什么 [Unknown]: CN CN=www.zlex.org, OU=zlex, O=zlex, L=BJ, ST=BJ, C=CN 正确吗? [否]: Y 输入<tomcat>的主密码 (如果和 keystore 密码相同,按回车): 再次输入新密码: |
这时,在D盘下会生成一个zlex.keystore的文件。
2.生成自签名证书
光有keyStore文件是不够的,还需要证书文件,证书才是直接提供给外界使用的公钥凭证。
导出证书:
Shell代码
keytool -export -keystore d:\zlex.keystore -alias www.zlex.org -file d:\zlex.cer -rfc
其中
-export指定为导出操作
-keystore指定keystore文件
-alias指定导出keystore文件中的别名
-file指向导出路径
-rfc以文本格式输出,也就是以BASE64编码输出
这里的密码是 123456
控制台输出:
Console代码
输入keystore密码:
保存在文件中的认证 <d:\zlex.cer>
当然,使用方是需要导入证书的!
可以通过自签名证书完成CAS单点登录系统的构建!
Ok,准备工作完成,开始Java实现!
通过java代码实现如下:Coder类见 Java加密技术(一)
Java代码
import java.io.FileInputStream; import javax.crypto.Cipher; /**
public static final String X509 = "X.509"; /** /** /** Certificate certificate = certificateFactory.generateCertificate(in); return certificate; /** return certificate; /** /** // 对数据加密 return cipher.doFinal(data); } /** // 对数据加密 return cipher.doFinal(data); } /** // 取得公钥 return cipher.doFinal(data); } /** // 对数据加密 return cipher.doFinal(data); } /** /** /** /** // 构建签名 /** return signature.verify(decryptBASE64(sign)); } /** /** |
再给出一个测试类:
import static org.junit.Assert.*; import org.junit.Test; /** @Test byte[] encrypt = CertificateCoder.encryptByPublicKey(data, byte[] decrypt = CertificateCoder.decryptByPrivateKey(encrypt, System.err.println("加密前: " + inputStr + "\n\r" + "解密后: " + outputStr); // 验证数据一致 // 验证证书有效 } @Test String inputStr = "sign"; byte[] encodedData = CertificateCoder.encryptByPrivateKey(data, byte[] decodedData = CertificateCoder.decryptByPublicKey(encodedData, String outputStr = new String(decodedData); System.err.println("私钥签名——公钥验证签名"); // 验证签名 } |
控制台输出:
Console代码
公钥加密——私钥解密 解密后: Ceritificate 私钥加密——公钥解密 解密后: sign 状态: |
由此完成了证书验证体系!
同样,我们可以对代码做签名——代码签名!
通过工具JarSigner可以完成代码签名。
这里我们对tools.jar做代码签名,命令如下:
Shell代码
jarsigner -storetype jks -keystore zlex.keystore -verbose tools.jar www.zlex.org
控制台输出:
Console代码
输入密钥库的口令短语: 警告: |
此时,我们可以对签名后的jar做验证!
验证tools.jar,命令如下:
Shell代码
jarsigner -verify -verbose -certs tools.jar
控制台输出:
Console代码
402 Sat Jun 20 16:25:14 CST 2009 META-INF/MANIFEST.MF X.509, CN=www.zlex.org, OU=zlex, O=zlex, L=BJ, ST=BJ, C=CN sm 705 Tue Dec 16 18:00:56 CST 2008 org/zlex/tool/Main$1.class X.509, CN=www.zlex.org, OU=zlex, O=zlex, L=BJ, ST=BJ, C=CN sm 779 Tue Dec 16 18:00:56 CST 2008 org/zlex/tool/Main$2.class X.509, CN=www.zlex.org, OU=zlex, O=zlex, L=BJ, ST=BJ, C=CN sm 12672 Tue Dec 16 18:00:56 CST 2008 org/zlex/tool/Main.class X.509, CN=www.zlex.org, OU=zlex, O=zlex, L=BJ, ST=BJ, C=CN
jar 已验证。 警告: |
代码签名认证的用途主要是对发布的软件做验证,支持 Sun Java .jar (Java Applet) 文件(J2SE)和 J2ME MIDlet Suite 文件。
发表评论
-
安全加解密介绍
2010-11-25 23:23 1034http://java.chinaitlab.com/List ... -
DSA数字签名
2010-11-25 23:21 3785DSA数字签名,非对称加密的另一种实现。 DSA ... -
安全网络通信——SSL.
2010-11-25 23:19 1316我们需要构建一个由CA机构签发的有效证书,这里我们使用上文 ... -
数字证书
2010-11-25 23:10 1458数字证书。 还有 ... -
数字签名
2010-11-25 23:02 1645数字签名,它是确定交换消息的通信方身份的第一个级别。上面A通过 ... -
公钥加密
2010-11-25 22:52 1229私钥加密需要一个共享的密钥,那么如何传递密钥呢?web环境下, ... -
私钥加密
2010-11-25 22:43 1530消息摘要只能检查消息的完整性,但是单向的,对明文消息并不能加密 ... -
JAVA上加密算法的实现用例
2010-10-26 20:46 1312核心提示:通常,使用的加密算法 比较简便高效,密钥简短,加 ... -
BASE64加密
2010-10-26 20:42 1914如基本的单向加密算法: ● BASE64 严格地 ... -
Java加密技术之RSA
2010-10-26 20:40 1363核心提示:RSA 这种算法1978年就出现了,它是第一个既 ... -
Java 加密技术(二)
2010-10-14 16:11 1340接下来我们介绍对称加密算法,最常用的莫过于DES数据加密 ... -
Java 加密技术(一)
2010-10-14 16:09 1776加密解密,曾经是我一个毕业设计的重要组件。在工作了多年以后 ...
相关推荐
该方案采用JAAS(Java Authentication Authorization Service)实现可插入式登录模块,采用X509数字证书作为用户身份认证,通过配置Web服务器,并利用服务器证书和客户端证书实现服务器与客户端之间的SSL双向认证;...
背景 随话说的好啊,好比不如烂笔头,之前开发联调OK后,闲置了半年,结果今天再去搞公钥,发现完全忘记了生成规则。...从下图我们可以看到通过 ConversionUtils.byteToHex方法获取到了公钥和私钥证书内容字符串
Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText(); //得到服务器地址 ...
百度云盘分享 ... Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText();...
"了解实现程序多线程 "讲授、单元实验 "12 " " " "的方法,掌握基本的 " " " " " "多线程编程技能 " " " "6 "数据库编程 "掌握通过Java应用程 "讲授、单元实验 "12 " " " "序访问数据库的编程 " " " " " "技能 " " ...
无涯教程网(learnfk)整理提供:Java密码体系结构用于实现现代密码学的概念,如数字签名,消息摘要和证书。
基于JAVA的先进技术体系,确保系统的领先性 采用SUN公司的J2EE体系,基于SOA总线的全开放式架构 融合了多种主流框架,自主研发了ZL-BPM系统作为平台底层支撑 轻量级框架,易用易理解,方便二次开发 ...
SSL协议采用RSA, DES等加密技术来实现数据的保密性,采用MD5信息摘要算法等来实现数据的完整性,使用数字证书进行身份认证。 2. SSL协议体系结构 SSL协议是一个中间层协议,在OSI模型中,SSL介于传输层(如TCP/IP)...
第1章 面向服务的体系架构(SOA) 1 本章主要介绍和解决以下问题,这些也是全书的基础: HTTP协议的工作方式与HTTP网络协议栈的结构。 如何实现基于HTTP协议和TCP协议的RPC调用,它们之间有何差别,分别适应...
结合 PKI 体系和数字证书,为自主开发的在线考试系统设计了一个基于硬件 USBKey 的考试系统数据安全传输的解决方案,并进行了实现,解决了开发过程中遇到的一些关键问题,尤其是C/C++和java之间跨语言的相互加密和解密的...
除了使用模块化体系结构的优点之外,MQTT Vert.x API的使用还可以根据例如系统核心的数量来扩展React式MQTT代理,从而实现水平可伸缩性。安装在安装soft-iot-vertx-mqtt-broker模块之前,您需要向ServiceMix引入...
定制版的 SDK 具有独立的开发者 PIN、密钥及证书体系,每个开发者的 SDK 均不同,黑客不会有通用的破解手段。 优势5:便捷的远程升级 远程升级可通过 d2c 包进行升级,无需更改软件代码。 优势5:互联网化体验 可...
方案 4、服务器发生系统故障时的分析与解决 5、微软体系架构的设计 岗位要求: 1、具有VCP或微软方面的认证证书 2、精通虚拟化及Windows各类应用 3、大专以上学历,计算机专业,英语精通 4、有三年以上从事服务器...
革新:.NET 2.0的自定义配置文件体系初探 关于如何在ASP.NET 2.0中定制Expression Builders 怎么在ASP.NET 2.0中使用Membership asp.net 2.0-实现数据访问(1) ASP.NET 2.0 新特性 .NET 2.0里使用强类型数据创建...
1、该题目以某公司的组织架构、岗位体系、人员结构、职工资源等业务为背景;通过先进的信息化平台,整合业务,规范和优化公司职工管理,全面提高公司职工管理的质量与效率。通过调研、分析现有的管理模式和已有的...
10.1.1成功认证时清除证书 91 10.1.2 DaoAuthenticationProvider 91 10.2 UserDetailsService实现 92 10.2.1内存认证 92 10.2.2 JdbcDaoImpl 93 权威组织 94 10.3密码编码 94 10.3.1什么是散列? 95 10.3.2添加盐到...
3 系统实现.................................................................29 3.1 多层分布式系统结构..................................................30 3.2引入控制器.....................................
需要注意的是,如果你要用一个IP地址对应多个不同的FTP服务器,则只能用使用不同的端口号的方法来实现,而不支持“主机头名”的做法。 对于已建立好的FTP服务器,在浏览器中访问将使用如“ftp://192.168.0.1”或是...
经考试合格,并颁发GIS 高级程序员高级研修班结业证书及3s高级系统设计工程师水平资质证书,全国各级人事、教育、职改部门承认的专业技术继续教育证书。 四、时间:报到时间:2009年6月19日8:00~12:30; 研修班与...