Java 生成数字证书系列(二)剖析数字证书

上一篇介绍了一下 CA 证书的几个相关概念,这几个概念还是很重要的,目的在于了解数字证书,以及其的工作原理。这篇文章主要是对 CA 证书进行剖析,讲一下证书的基本构成,这对于生成正确的、可以访问的证书是必不可少的。

构成

废话不多说,直接上内容。

先看一下证书到底是什么,在 Windows 下查看证书时(这里以 cer 为例),界面是这样的。

常规 选项卡里,主要介绍了证书信息,颁发者,和有效日期等。

而 详细信息 选项卡中,包含的信息是比较多的,他们都是以一种 Key — Value 的形式存在的,其中字段包括:版本、序列号、签名算法、颁发者、有效期、公钥、指纹等等。在上一篇文章中也有提到。下面我们就详细的来看看这些字段到底是干什么用的。

详细信息

  • 版本(Version)

很明显,这个是证书的版本号,不同版本的证书格式是不同的。这里,我用的是 V3 版本。

  • 序列号(Serial Number)

证书序列号,同一身份验证机构签发的证书序列号是唯一的。

  • 签名算法(Signature algorithm)

签名算法,指的是这个数字证书中的数字签名所使用的加密算法,可以通过根证书中的公钥对这个证书中的指纹进行解密。

  • 颁发者(Issuer)

证书发布机构,指出这个证书是哪个公司创建的,这是哪个 CA 中心的证书。当然,如果是你自己公司生成的证书,那么颁发者就是你自己的公司了。

  • 有效期(Valid from to)

证书的生成日期,以及证书使用的截至日期。证书有效期失效之后,在认证服务器中会进行校验,校验失败后,重新生成新证书或者是其他的操作。这个依据证书的发布机构而定。

  • 使用者(Subject)

这个证书是发布给谁的,或者说是证书的所有者,一般是某个人或者某个公司的名称、机构的名称、公司网站的网址等。当然,如果是根证书的话,那么,使用者就是自己的公司了。

  • 公钥(Public key)

证书的公钥,主要是用来对消息进行加密的,这个证书的公钥是 2048 位的,他的值可以在对话框中看到,是很长的一段十六进制数。

  • 指纹及指纹算法(Thumbprint、Thumbprint algorithm)

指纹以及指纹算法,在证书发布的时候,发布机构会根据指纹算法先计算出整个证书的hash值,并使用证书发布机构的私钥对其进行签名构成一个指纹,并将指纹与该证书放在一起。

在生成证书的时候,需要自己设定颁发者、有效期、使用者等等。版本、签名算法、以及证书公钥等都是要设定的,否则生成的证书是无法正常使用的。

结束语

这篇文章其实讲的不是很多,主要是把证书的构成给提了出来,详细的讲了一下。下一步,就要开始如何使用 Java 的 API,以及第三方的组件来生成 CA 证书。

时间: 2024-11-05 22:02:02

Java 生成数字证书系列(二)剖析数字证书的相关文章

原 Java学习之Xml系列二:xml按条件查询、xml递归遍历所有元素和属性

xml中加入了几条,为了方便查询时作为示例. 话不多说见代码注释: DTD文件:SwordTypeDefinition.dtd <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT SwordLibrary (Sword*)> <!ELEMENT Sword (SwordName,Price,Attack)> <!ELEMENT SwordName (#PCDATA)> &l

二维码的功能、特点及使用Java生成带logo的二维码

二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的:在代码编制上巧妙地利用构成计算机内部逻辑基础的"0"."1"比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集:每个字符占有一定的宽度:具有一定的校验功能等.同时还具有对不同行的信息自动识

Java性能优化指南系列(二):Java 性能分析工具

进行JAVA程序性能分析的时候,我们一般都会使用各种不同的工具.它们大部分都是可视化的,使得我们可以直观地看到应用程序的内部和运行环境到底执行了什么操作,所以性能分析(性能调优)是依赖于工具的.在第2章,我强调了基于数据驱动的性能测试是非常重要的,我们必须测试应用的性能并理解每个指标的含义.性能分析和数据驱动非常类似,为了提升应用程序的性能,我们必须获取应用运行的相关数据.如何获取这些数据并理解它们是本章的主题.[本章重点介绍JDK中提供的性能分析工具] 操作系统工具及其分析 程序分析的起点并不

Java生成带小图标的二维码-google zxing 工具类

近期一直忙于开发微信商城项目,应客户要求,要开发个有图标的二维码.经过两次改版,终于实现了该功能(第一次没有小图标,这次才整合好的),如下是完整代码 . 该代码使用Java7开发,另外使用 core-2.2.jar jar[http://pan.baidu.com/s/1skTwHQ1] 包 . 1 package com.rick.common.utils; 2 3 4 import java.awt.Color; 5 import java.awt.Graphics2D; 6 import

Java生成带logo 的二维码

这个工具类主要实现了两点功能: 1. 生成任意文链接的二维码. 2. 在二维码的中间加入图像. 主要实现步骤: 第一步: 导入QR二维码3.0 版本的core包和一张jpg图片(logo). core包下载地址:http://central.maven.org/maven2/com/google/zxing/core/3.0.0/ 第二步: 新建一个Java project.将刚下载的core-3.0.0 jar 添加到项目依赖中. 具体步骤: 第三步: 新建两个类,分别是: BufferedI

Java生成读取条形码和二维码图片

原文:http://www.open-open.com/code/view/1453520722495 package zxing; import com.google.zxing.BarcodeFormat; import com.google.zxing.Binarizer; import com.google.zxing.BinaryBitmap; import com.google.zxing.DecodeHintType; import com.google.zxing.EncodeH

java生成带logo的二维码,自定义大小,logo路径取服务器端

package com.qishunet.eaehweb.util; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Shape; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import jav

Java中map集合系列原理剖析

看了下JAVA里面有HashMap.Hashtable.HashSet三种hash集合的实现源码,这里总结下,理解错误的地方还望指正 HashMap和Hashtable的区别 HashSet和HashMap.Hashtable的区别 HashMap和Hashtable的实现原理 HashMap的简化实现MyHashMap HashMap和Hashtable的区别 两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全Hashtable的实现方法里面都添加了synchron

Java生成名片式的二维码源码分享

世界上25%的人都有拖延症——但我觉得这统计肯定少了,至少我就是一名拖延症患者.一直想把“Java生成名片式(带有背景图片.用户网络头像.用户昵称)的二维码”这篇博客分享出来,但一直拖啊拖,拖到现在,真应了苏格兰的那句谚语——“什么时候都能做的事,往往什么时候都不会去做.” 零.效果图 左上角为微信头像. 沉默王二是文字昵称. 附带URL为http://blog.csdn.net/qing_gee的二维码 还有指定的背景图. 使用场景: 点公众号的微信菜单“我的二维码”,然后展示一张名片式的二维