- 浏览: 179806 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (56)
- 算法 (9)
- linux (15)
- oracle (4)
- Project Euler Problem (3)
- 编程珠玑 (2)
- 数学 (1)
- http (1)
- java (19)
- plsql (1)
- apusic (1)
- https (1)
- 备忘 (22)
- 概率 (1)
- EIP (0)
- eclipse (1)
- 安全 (1)
- 公钥体系 (6)
- PKI (2)
- 网络 (2)
- linux,克隆 (0)
- virt-manager (1)
- VMWare (1)
- 克隆 (1)
- logback (1)
- TimeBasedRollingPolicy (0)
- SizeBasedTriggeringPolicy (0)
- properties (1)
- class (1)
- classloader (1)
- netty (1)
- thread dump (1)
- jstack (1)
- jconsole (1)
- java,编码,文件名 (0)
- google (1)
- goagent (1)
- 线程池 (1)
- 博客 (1)
- hexo (1)
- github (1)
- gitcafe (1)
最新评论
-
panhl:
我也实现了一个https://github.com/panho ...
具有相同属性任务串行有序执行的线程池设计 -
fengwei5129:
感谢,最近在看netty源码一直搞不清楚是如何实现的死锁检测, ...
Future机制用于并发编程时的死锁检测 -
OpenMind:
发现IBM JDK的System.nanoTime()没有实现 ...
Java系统时钟几个值得思考的问题 -
lvhongfen:
好了,感谢LZ分享
windows下plsql 设置 里面timestamp显示的格式 -
OpenMind:
今天发现,在linux下还有个很简介的方法查看线程的转储信息, ...
不依赖jstack的java 线程dump和死锁检查工具
这些代码首先加载CA证书,然后分别用CA给Alice和Bob签发一个证书并保存到resource/目录下面,用jks格式存储。
CA证书也是用java编程方式制作的,制作过程请看我的上一篇博客。
public static void main(String[] args) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, FileNotFoundException, IOException, UnrecoverableEntryException { //读取CA证书的JKS文件 KeyStore store = KeyStore.getInstance("JKS"); File file = new File("resource/atlas-ca.jks"); store.load(new FileInputStream(file), "atlas".toCharArray()); PrivateKeyEntry ke = (PrivateKeyEntry) store.getEntry("atlas", new PasswordProtection("atlas".toCharArray())); String subject = "C=CN,ST=GuangDong,L=Shenzhen,O=Skybility,OU=Cloudbility,CN=Alice,E=alice@163.com"; //给alice签发证书并存为xxx-alice.jks的文件 gen(ke, subject, "alice"); subject = "C=CN,ST=GuangDong,L=Shenzhen,O=Skybility,OU=Cloudbility,CN=Bob,E=Bob@gmail.com"; //给Bob签发证书并存为xxx-bob.jks的文件 gen(ke, subject, "bob"); } //用KeyEntry形式存储一个私钥以及对应的证书,并把CA证书加入到它的信任证书列表里面。 public static void store(PrivateKey key, Certificate cert, Certificate caCert, String name) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException { KeyStore store = KeyStore.getInstance("JKS"); store.load(null, null); store.setKeyEntry(name, key, name.toCharArray(), new Certificate[] { cert, caCert }); File file = new File("resource/atlas-" + name + ".jks"); if (file.exists() || file.createNewFile()) { store.store(new FileOutputStream(file), ("_"+name).toCharArray()); } } //用ke所代表的CA给subject签发证书,并存储到名称为name的jks文件里面。 public static void gen(PrivateKeyEntry ke, String subject, String name) { try { X509Certificate caCert = (X509Certificate) ke.getCertificate(); KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(2048); KeyPair keyPair = kpg.generateKeyPair(); KeyStore store = KeyStore.getInstance("JKS"); store.load(null, null); String issuer = caCert.getIssuerDN().toString(); Certificate cert = generateV3(issuer, subject, BigInteger.ZERO, new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24), new Date(System.currentTimeMillis() + 1000L * 60 * 60 * 24 * 365 * 32), keyPair.getPublic(),//待签名的公钥 ke.getPrivateKey()//CA的私钥 , null); store(keyPair.getPrivate(), cert, ke.getCertificate(), name); } catch (Exception e) { e.printStackTrace(); } } public static Certificate generateV3(String issuer, String subject, BigInteger serial, Date notBefore, Date notAfter, PublicKey publicKey, PrivateKey privKey, List<Extension> extensions) throws OperatorCreationException, CertificateException, IOException { X509v3CertificateBuilder builder = new JcaX509v3CertificateBuilder( new X500Name(issuer), serial, notBefore, notAfter, new X500Name(subject), publicKey); ContentSigner sigGen = new JcaContentSignerBuilder("SHA1withRSA") .setProvider("BC").build(privKey); //privKey是CA的私钥,publicKey是待签名的公钥,那么生成的证书就是被CA签名的证书。 if (extensions != null) for (Extension ext : extensions) { builder.addExtension(new ASN1ObjectIdentifier(ext.getOid()), ext.isCritical(), ASN1Primitive.fromByteArray(ext.getValue())); } X509CertificateHolder holder = builder.build(sigGen); CertificateFactory cf = CertificateFactory.getInstance("X.509"); InputStream is1 = new ByteArrayInputStream(holder.toASN1Structure() .getEncoded()); X509Certificate theCert = (X509Certificate) cf.generateCertificate(is1); is1.close(); return theCert; }
发表评论
-
具有相同属性任务串行有序执行的线程池设计
2014-09-04 15:30 1434我有一个这样的线程池的场景,相信很多人都遇到过: 1,每个用 ... -
不依赖jstack的java 线程dump和死锁检查工具
2013-10-08 14:41 2444java线程dump可以使用jdk的命令“jstack ... -
回忆去年用Java破解unity.exe的过程
2013-05-26 00:48 2663去年我一同学要我破解unity.exe,然后挂在网上卖点钱花 ... -
netty做Pipe一端快一端慢时防止内存溢出进行的操作
2013-05-23 17:12 5938前段时间用netty3.x做了 ... -
为什么InputStream.read()读取一个byte确返回一个int呢?
2013-05-09 16:26 5226问题1:为什么InputStream.read()读取一个 ... -
Java系统时钟几个值得思考的问题
2013-04-10 16:48 4611System.currentTimeMillis()是依赖 ... -
logback的SizeBasedTriggeringPolicy和TimeBasedRollingPolicy联合使用问题
2013-04-01 13:37 15232<appender name="FILE& ... -
netty应用分析
2013-03-07 15:54 0用netty 3.5.7做了一个网络程序,c与s之间有一个心 ... -
Java包装类Integer比较
2012-10-18 16:41 11291,用符号==比较两个对象,意味着比较他们是否是统一个对象。 ... -
Future机制用于并发编程时的死锁检测
2012-10-18 14:51 6008Netty源码里面有个类:De ... -
java-在非安全网络上建立可信任安全的通道(2/3)
2012-10-05 19:19 1251在不安全的网络环境下进行密钥交互(1/3,前面那一节),容易遭 ... -
java-在非安全网络上建立可信任安全的通道(1/3)
2012-10-05 18:46 1908看到标题,几乎所有人都会想到SSL,但SSL比较重 ... -
java编程方式生成CA证书
2012-10-05 17:28 15365下面是java编程方式生成CA证书的代码,使用的是BC的pro ... -
安全领域的一些概念
2012-10-05 16:41 1422对称密钥/非对称密钥/key/cipher symmetri ... -
Class.getResourceAsStream
2013-04-06 14:09 1029Class.getResourceAsStream(" ... -
findbugs
2012-03-02 16:41 0findbugsfindbugsfindbugsfindbug ... -
并发编程
2012-03-02 16:41 0C:\Users\Sunny\Desktop\docC:\Us ... -
泛型类里面获取到泛型的类型
2012-03-01 10:15 3454下面的代码可以让你在抽象的泛型类里面获取到泛型的类型 ab ... -
java 学习网站大全
2012-02-27 12:02 0http://scjp.home.sohu.com/ 模拟试题 ... -
First JNI
2012-02-13 14:34 816http://hi.baidu.com/fwmf/blog/i ...
相关推荐
### Java实现浏览器CA证书的签名和验证 #### 概述 随着互联网的普及和技术的发展,网络安全成为了维护用户信心和确保电子商务顺利进行的关键因素之一。在众多保障网络安全的技术中,数字证书及其背后的公钥基础...
用户可以通过检查证书上的CA签名来确认公钥的合法性。 4. **Java中的KeyPairGenerator和KeyStore类**:在Java中,我们可以使用`KeyPairGenerator`类来生成公钥-私钥对,通常使用`KeyPairGenerator.getInstance("RSA...
在Java编程环境中,数字证书和数字签名是网络安全和数据完整性的重要组成部分。这些概念与Java的加密库和证书处理机制紧密相关。在这个项目中,我们似乎有一个包含Java实现数字证书和数字签名功能的源码模块。 首先...
在Java编程环境中,生成数字证书是一项关键的安全技术,主要用于数据加密、身份验证和签名等应用场景。数字证书通常包含了公钥和私钥对,以及证书持有者的相关信息,这些信息经过认证机构(CA)的签名,确保了证书的...
在Java中,可以使用KeyStore类来管理和操作这些证书,包括加载、存储和选择合适的证书进行签名操作。 在实际应用中,开发者需要根据项目需求和资源选择适合的库。iTextPDF更适合需要高度定制签名外观和高级功能的...
如果证书是由受信任的CA签发,并且没有过期或被撤销,那么浏览器就会认为该网站是安全的,可以进行加密通信。CA通过一套严谨的验证流程来确认网站所有者的身份,这个过程包括对申请者的企业资料、域名所有权等信息的...
证书包含了用户的公钥、身份信息以及由CA签名的信息,确保公钥的真实性。在本例中,提供的程序可能包含了一些用于与USB KEY交互的代码,允许用户通过Java应用程序安全地读取或使用存储在USB设备上的证书。 在描述中...
这个过程涉及到的标签"java"、"jar"、"开发语言"指的是使用Java编程语言进行开发并打包成jar文件;"https"和"网络协议"是指生成的X509证书在HTTPS通信中的应用。通过这个jar包,开发者可以在他们的项目中快速生成...
7. **编程实现**:在Java中,可以使用`Runtime.getRuntime().exec()`方法执行操作系统命令,例如安装证书的命令。同时,需要处理异常和错误输出,确保程序的健壮性。 8. **证书生命周期管理**:除了安装,证书还有...
在这个Java源码包中,我们可能找到了用于生成数字签名和数字证书的相关代码,这对于理解和实践Java的安全编程至关重要。 数字签名是一种用于验证电子信息完整性的方法,它结合了非对称加密技术。在Java中,我们可以...
当你需要在Java程序中发送HTTPS请求时,可能会遇到证书相关的问题,特别是当服务器使用自签名证书或者非标准CA签发的证书时。本文将详细讲解如何在Java中处理这类问题,以及如何使用httpUtils工具进行HTTPS请求。 ...
3. 签发证书:使用`java.security.cert.X509CertGenerator`生成自签名证书,这里既是CA也是证书持有者,所以用自己的私钥对请求进行签名。 4. 导出证书:证书可以以PEM或DER格式存储,方便使用。 在给定的压缩包...
在Java编程环境中,生成证书是一项常见的任务,尤其在网络安全、HTTPS服务器配置以及开发自签名证书等方面有着广泛应用。标题“certificate-generator-master_java证书生成_”暗示我们关注的是一个用于生成证书的...
2. 申请数字证书:使用keytool生成CSR(Certificate Signing Request),并提交给证书颁发机构(CA)。 3. 颁发数字证书:CA验证请求后,签发证书并返回给用户。 4. 安装数字证书:将CA签发的证书导入到Keystore中。...
在Java编程环境中,数字证书是用于验证网络身份和数据完整性的关键组件,它们通常基于公开密钥基础设施(PKI)工作。以下是对Java中数字证书的一些常见操作的详细解释: 一、所需导入的包: 在处理数字证书时,Java...
通过阅读`SignCert.java`,我们可以学习到实际编程中如何应用这些理论知识,例如如何使用Java的`java.security`包中的类来操作密钥和证书,以及如何集成CA的服务。 总结起来,数字证书和数字签名在保护网络安全方面...
标题中的"Des.zip_ca java"表明这是一个与Java编程语言相关的项目,主要涉及到DES(Data Encryption Standard)加密算法和CA(Certificate Authority)证书的使用。在IT领域,DES是一种经典的对称加密算法,而CA则是...
在Java编程环境中,数字证书是实现安全通信的关键组件。它主要用于身份验证、数据加密和完整性保护,尤其是在网络传输中。本教程将深入讲解如何在Java中使用数字证书,包括理解其概念、创建与管理,以及如何在实际...
在Java编程中,安全是至关重要的,特别是在网络通信和数据传输方面。SSL(Secure Sockets Layer)和它的继任者TLS(Transport Layer Security)是确保数据安全的重要协议,它们为网络连接提供了加密和身份验证机制。...