- 浏览: 1336583 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (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 1088http://java.chinaitlab.com/List ... -
DSA数字签名
2010-11-25 23:21 3826DSA数字签名,非对称加密的另一种实现。 DSA ... -
安全网络通信——SSL.
2010-11-25 23:19 1353我们需要构建一个由CA机构签发的有效证书,这里我们使用上文 ... -
数字证书
2010-11-25 23:10 1521数字证书。 还有 ... -
数字签名
2010-11-25 23:02 1710数字签名,它是确定交换消息的通信方身份的第一个级别。上面A通过 ... -
公钥加密
2010-11-25 22:52 1263私钥加密需要一个共享的密钥,那么如何传递密钥呢?web环境下, ... -
私钥加密
2010-11-25 22:43 1573消息摘要只能检查消息的完整性,但是单向的,对明文消息并不能加密 ... -
JAVA上加密算法的实现用例
2010-10-26 20:46 1356核心提示:通常,使用的加密算法 比较简便高效,密钥简短,加 ... -
BASE64加密
2010-10-26 20:42 1949如基本的单向加密算法: ● BASE64 严格地 ... -
Java加密技术之RSA
2010-10-26 20:40 1397核心提示:RSA 这种算法1978年就出现了,它是第一个既 ... -
Java 加密技术(二)
2010-10-14 16:11 1382接下来我们介绍对称加密算法,最常用的莫过于DES数据加密 ... -
Java 加密技术(一)
2010-10-14 16:09 1865加密解密,曾经是我一个毕业设计的重要组件。在工作了多年以后 ...
相关推荐
在IT安全领域,证书吊销列表(Certificate Revocation List,简称CRL)是验证数字证书有效性的重要机制。CRL由证书颁发机构...对于开发和维护此类工具,深入理解X.509证书体系和Java的安全框架是至关重要的。
在Java Secure Socket Extension (JSSE) 中,它扮演着创建和管理KeyStore和TrustStore的角色,以实现SSL/TLS协议的安全通信。 KeyStore是Java用来存储密钥对和证书的容器,它可以包含公钥、私钥以及相应的证书链。...
本资源包含的Java代码工具包提供了生成数字签名和数字证书的源码,这有助于开发者快速理解和实现相关功能。 首先,让我们了解一下数字签名。数字签名是一种用于验证电子文档完整性和发送者身份的技术。它利用非对称...
13. **安全性**:了解Java的安全特性,如证书、加密、权限控制等,以及如何防止常见的安全漏洞,如SQL注入、XSS攻击等。 以上只是Java学习体系的一部分,随着技术的不断发展,你还需要关注新的趋势和技术,如云计算...
总之,Java加密体系结构为Java应用程序提供了强大而灵活的密码学支持,使得开发者能够在遵循平台无关性和安全性原则的同时,实现复杂的安全功能。无论是简单的报文摘要计算还是复杂的密钥管理和数字签名,JCA都提供...
本资料“Java 2平台安全技术-结构,API设计和实现”深入探讨了这一领域的关键概念和实践。 1. **Java安全模型** Java的安全模型基于三个主要原则:隔离、最小权限和强制访问控制。它通过沙箱机制确保代码只能访问被...
本文将深入探讨Java如何通过其语言特性、类加载器和安全管理器来实现安全性。 首先,Java的源代码被编译成字节码(class文件),这是Java平台无关性的关键。字节码是一种平台无关的中间表示,可以在任何支持Java...
总的来说,Java 2平台的安全技术是一个复杂而全面的体系,涵盖了从代码加载、执行到网络通信的各个环节,旨在创建一个安全、可靠的应用程序运行环境。理解和掌握这些技术对于开发安全的Java应用程序至关重要。这本书...
### Java安全体系在Web程序中的研究和应用 #### 1. 方案背景及意义 随着互联网技术的迅猛发展,Web程序已经成为人们日常生活中不可或缺的一部分,包括电子商务、电子政务、在线教育等多个领域。然而,互联网的开放...
本资料"Java2平台安全技术-结构,API设计和实现"聚焦于Java安全机制的深入理解和实践,涵盖了以下几个关键知识点: 1. **Java安全模型**:Java的安全模型基于沙箱机制,确保代码在执行时不会对系统造成破坏。它通过...
身份认证通常涉及用户身份的验证,这可以通过公钥基础设施(PKI)中的数字证书来实现。数字签名则用于确保数据的完整性和来源的可信度,通过生成和验证签名来实现。JCA提供了生成和验证数字签名的API,而JCE则负责...
在IT领域,尤其是在网络安全和密码学中,"ecdsa.rar_CA_ECDSA_java ecdsa_java ecdsa 加密_证书签发"这个标题涉及到的是一个关于使用Java实现的椭圆曲线数字签名算法(ECDSA)以及证书授权中心(CA)的系统。...
本文档深入探讨了Java实现的各种加密解密算法,以及数字证书的概念。 首先,基础的单向加密算法主要用于生成信息摘要,它们是非可逆的,即无法通过摘要还原原始数据。其中包括: 1. **BASE64**:实际上是一种编码...
该方案采用JAAS(Java Authentication Authorization Service)实现可插入式登录模块,采用X509数字证书作为用户身份认证,通过配置Web服务器,并利用服务器证书和客户端证书实现服务器与客户端之间的SSL双向认证;...
背景 随话说的好啊,好比不如烂笔头,之前开发联调OK后,闲置了半年,结果今天再去搞公钥,发现完全忘记了生成规则。...从下图我们可以看到通过 ConversionUtils.byteToHex方法获取到了公钥和私钥证书内容字符串
《精通Eclipse Web开发--Java体系结构、工具、框架及整合应用》这本书是为Java开发者提供的一本深度学习Eclipse IDE、Web开发技术以及相关工具和框架的指南。以下是本书涵盖的一些关键知识点: 1. **Java体系结构**...
- **Java体系结构概述**:本章主要介绍了Java体系结构的基本概念及其组成部分。Java体系结构旨在为开发者提供一个统一、高效且跨平台的应用开发环境。 - **Java虚拟机(JVM)**:JVM是Java体系的核心组件,负责解释...
Java EE 提供了一系列的协议,用于实现企业级应用程序的通信和交互。这些协议包括 HTTP、HTTPS、IIOP、JRMP 等。 设计模式 设计模式是指在软件设计中常用的解决方案。Java EE 架构师需要了解各种设计模式,包括...
它利用了Java平台自带的工具,实现了证书信息的有效管理和存储。 在PKI体系中,证书是用于确认网络身份的重要组件,它包含了公钥、私钥持有者的身份信息以及由权威机构签发的数字签名。这个管理系统软件可能提供了...
9. Java继承和接口:试卷中可能包含有关类继承和接口实现的问题,测试考生对Java继承体系的理解。 10. Java内部类:涉及了内部类和匿名内部类的创建和使用。 11. Java数据类型和操作:考查了基本数据类型转换、...