证书概念及相关操作

x.500

作用:

是ITU-T关于目录服务的一系列规范、协议,用于解决国际电话、电报互联互通、邮件发送时的人员查找、身份认证等问题。

其它:

  • 包括的子集: X.501 X.509

  • 协议簇(1988年发布):
  • DAP 轻量级实现:LDAP
  • DSP
  • DISP
  • DOP

ASN.1(Abstract Syntax Notation One,抽象语法标识)

作用:

是一台平台无关、语言无关的数据结构定义语法。

编码格式(都可以编成XML格式):

  • BER 常用
  • CER 常用
  • DER 常用
  • XER
  • TLV :二进制流的TLV方式表达数据结构

BER

Basic Encoding Rules 基本编码格式

DER

Distinguished Encoding Rules 卓越编码格式

  • 是BER的一个子集,为更严格的一个变种版本
  • 定长

CER

Canonical Encoding Rules 权威编码格式

  • CER和DER一样,都是BER的限定编码规则的子集。
  • CER和DER不同在于它是不定长编码,可以用于大数据块的封装。

导出证书格式

  • DER 编码二进制 X.509(.CER)
  • Base64 编码 X.509(.CER)
  • 加密消息语法标准 - PKCS #7(.P7b)
  • 个人信息交换 -PKCS #12(.PFX)
  • Microsoft 序列化证书存储(.SST)

注 前三个导出的证书都是DER编码
第一种是二进制格式
第二种是PEM(安全电子邮件)格式的的文本格式
第三种是包括证书链的二进制格式,也可以是文本格式。
这里的CER仅是指文件后缀名,与ASN.1的CER编码没关系

PEM

  • Privacy Enhanced Mail 安全增强邮件
  • 这是一种文件格式,这格式使用一个头,尾标识文件的内容,如下:

被加密的私钥

---BEGIN ENCRYPTED PRIVATE KEY ---
LDKSFJSADJLSDKJGKLDFJFLSDKJFKLSDJSKLJFDGHKLSD
DJFLASKDFJLSKDFJKLSDJLDGHDJCVNDKFJGHDLFJSKLDF
DGJFKLCJVIHJURFJDGKLJFGDIJFGIOWEJIOLDJEOGEORI
---BND ENCRYPTED PRIVATE KEY  ---

证书格式

---BEGIN CERTIFICATE---
LDKSFJSADJLSDKJGKLDFJFLSDKJFKLSDJSKLJFDGHKLSD
DJFLASKDFJLSKDFJKLSDJLDGHDJCVNDKFJGHDLFJSKLDF
DGJFKLCJVIHJURFJDGKLJFGDIJFGIOWEJIOLDJEOGEORI
---END CERTIFICATE---

他们之间的关系

  • 所有X.509都是DER编码,DER是指ASN.1的编码规则,.der证书文件一般是二进制文件。
  • CER可用于PKCS#7证书(p7b)的编码,但一般是指证书的文件后缀,.cer证书可以是纯BASE64文件或二进制文件。
  • PEM通常也是指文件的后缀,为内容使用BASE64编码且带头带尾的特定格式,二进制的文件不应该命名为pem。
  • CRT是微软的证书后缀名,和.CER是一回事。
  • 微软的CryptAPI很强大,证书的各种格式都可以识别,比如纯BASE64编码的、标准PEM格式的、非标识PEM格式的(不是64字节换行、没有头尾等)、二进制格式的。
  • 但openssl、JCE则不行,必须是标准的PEM格式和DER格式。

一些术语

PFX

Personal Information Exchange

  • PKCS#12是PFX的后续版本,一般情况二者为等同概念
  • PFX或PKCS#12 是包括私钥的个人证书,通过口令保护私钥
  • 后缀名为.pfx 或 .p12
  • openssl keytool portecle(keyStore工具)都可以生成PFX证书

CRL/ARL

Certificate Revocation List(证书吊销列表)

  • 也属于X.509标准,定义在RFC5280

LDAP

Lightweight Directory Access Protocol(轻量目录访问协议)

  • 是X.500 DAP协议的一个轻量级实现。
  • 基本上遵循X.500的大部分标准,所以LDAP的DN结构、object class、attributes都是X.500标准。

一些操作(java)

KeyStore 类

  • 主要来读取密钥
  • 分两种情况 1 知道key的名字 2 不知道key的名字
  • 第一种,先用fileinputstream 得到key名,再取key值
  • 第二种,直接 keystore.getkey("name",passsword) passwrod是keystore的密码

certificate 类

  • 主要用来得到公钥
  • certificate.getpublickey

检验签名

 //用公钥验签
    //第一个data 是原文
    //第二个data 是加密之后
    public static boolean verify(byte[] data, PublicKey publicKey, byte[] sign) throws Exception {
        Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);

        //验签的过程
        signature.initVerify(publicKey);
        //进行操作与比对
        signature.update(data);
        //看看值是否一样
        return signature.verify(sign);

    }



你可能感兴趣的:(证书概念及相关操作)