Java安全之数字证书

本文介绍了数字证书在确保网络安全中的作用,包括CER和DER编码格式,以及PKCS标准。通过12306的证书实例展示了证书包含的信息,并讲解了证书获取流程、信任机制和证书颁发过程。在Java环境中,还探讨了如何处理证书的操作。
摘要由CSDN通过智能技术生成

   在前面说到,消息摘要用于验证数据完整性,对称与非对称加密用于保证数据保密性,数据签名用于数据的抗否认性,于是集这些安全手段于一身的终极武器--数字证书出现了。数字证书具备了加密/解密的必要信息,包含签名算法,可用于网络数据加密/解密交互,标识网络用户(计算机)身份。数据证书为发布公钥提供了一种简便途径,成为加密算法以及公钥的载体。

   数字证书有多种文件编码格式,主要包含CER编码、DER编码等:
a.CER(Canonical Encoding Rules,规范编码格式),是数字证书的一种编码格式,它是BER(Basic Encoding Rules,基本编码格式)的一个变种,比BER规定得更加严格。
b.DER(Distinguished Encoding Rule, 卓越编码格式),同样是BER的一个变种,与CER不的同之处在于:DER使用定长模式,而CER使用变长模式。
c.PKCS(Public-Key Cryptography Standards,公钥加密标准),由RSA实验室和其它安全系统开发商为促进公钥密码发展而制定的一系列标准。
   其中CER、DER格式证书都符合公钥基础设施(PKI)制定的X509国际标准(X.509标准),统称为X509格式证书。PKCS至今共发布过15个标准,常用标准包括PKCS#7、PKCS#10和PKCS#12。PKCS#7为密码消息语法标准,文件名后缀一般为:.p7b、.p7c、.spc;PKCS10#为证书请求语法标准,故证书请求文件采用该格式,文件名后缀一般为:.p10、.csr;PKCS#12为个人信息交换语法标准,故个人信息证书采用该格式,文件名后缀一般为:.p12、.pfx。值得一提的是虽然PKCS#12为一种证书格式,但在Java中,个人更觉得是一种KeyStore格式,因为PKCS#12格式文件中既可以存储证书,还可以存储私钥,而一般意义说来,证书是不包含私钥信息的。

 

 

一、数字证书具体包含了哪些信息,我们以12306的数字证书为例:

 

 

从上面的截图可以看到,一张数字证书中包含了很多信息,主要有,版本号、序列号、签名算法、签名哈希算法、颁发者、有效期、使用者、公钥、指纹算法、指纹以及一些数字证书的扩展属性信息。

二、证书如何获取
假如你的公司要上线一个购物网站,那么肯定会使用到https协议,也就肯定会使用到数字证书,那么数字证书从哪里来?是自己生成吗?当然不是,正确的做法是,公司生成一个证书请求文件,再把证书请求文件提交给证书认证机构,然后证书认证机构使用其根证书再根据证书请求文件中的信息为您生成受信任证书,也就是颁发证书,当然要让证书认证机构为您公司颁发证书这是需要money的。但是有些时候也可以自己创建证书,只不过这时候的证书颁者是你自己,只要别人信任你自己的根证书,证书也可以照常使用。

三、证书是否合法(受信任)
说到证书是否受信任的问题就得先知道一条规则:受信任的证书所颁发的证书也是受信任的。那么先有鸡还是先有蛋的问题来了,第一个受信任的证书是从哪里来的,为了解决这个问题就引出了根证书,根证书是自己颁发给自己的证书,只要信任了根证书,这样由根证书颁发的证书也就可以被信任,所以证书颁发其实是一种树形结构,根证书可以颁发一级证书,一级证书在允许的情况下也可以为其它用户颁发二级证书。以Windows, IE为例(IE共用Windows系统中的证书),在Windows安装好后,系统就已经信任了一些权威证书认证机构的根证书,当然你也可以导入你自己制作的根证书。

四、何为证书颁发
证书颁发是个专业术语,其实就是使用证书颁发者的私钥对证书使用者的证书进行签名,并设置使用者证书的颁发者,证书一般情况下需要由权威的证书认证机构颁发,其原就是对证书进行签名使用的是私钥,私钥只有颁发机构才有。

 

 

下面就看看在Java中是如何完成对证书的各种操作的:

 

package com.xtayfjpk.security.certificate;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.math.BigInteger;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.Provider;
import java.security.PublicKey;
import java.security.Security;
import java.security.Signature;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值