175210课设第一周报告

计划完成的任务

  • 了解 ASN.1 语法规范
  • 学习 X509 证书(证书格式,内容等)
  • 学习并使用 openssl 工具

了解 ASN.1 语法规范

概览

ASN.1 描述了一种对数据进行表示、编码、传输和解码的数据格式,个人感觉和jsonxml 意义差不多。

ASN1含有一套编码规则,包括了:
  • BER basic encoding rules
  • DER distinguished encoding rules
  • CER canonical encoding rules
  • PER packed encoding rules
  • XER XML encoding rules
我们来看看这些编码标准和证书的对应关系
  • linux 下常用的.crt 证书,可以采用der编码(但更多情况下使用pem 编码)

  • windows 下的.cer证书,采用cer编码

  • 上述的证书不包含密钥。.key文件存储一个公钥或私钥,使用derpem编码

  • ber是最初的编码标准,der等都是在其基础上发展而来的。ber用的较少

  • per感觉用的较少,没找到多少资料

数据类型

NULL:只包含一个值NULL,用于传送一个报告或者作为CHOICE类型中某些值

INTEGER:全部整数(包括正数和负数)

REAL:实数,表示浮点数

ENUMERATED:标识符的枚举(实例状态机的状态)

BITSTRING:比特串

OCTETSTRING:字节串

OBJECT IDENTIFIER,RELATIVE-OID:一个实体的标识符,它在一个全世界范围树状结构中注册

EXTERNAL,EMBEDDED PDV:表示层上下文交换类型

…String(除了BITSTRING、OCTETSTRING外):各种字符串

CHARACTERSTRING:允许为字符串协商一个明确的字符表

UTCTime,GeneralizedTime:日期

我还没有深入研究,先跳过

观察 X509 证书(证书格式,内容等)

生成证书

  • 我是自签名证书,所以先要生成 CA 私钥openssl genrsa -des3 -out ca.key 2048 如图

175210课设第一周报告

使用genrsa生成一个RSA的私钥文件,并使用DES3对称算法来加密该私钥文件,Enter pass phrase for ca.key 是让我们输入 DES3 加密算法的密钥

  • 自签名证书 openssl req -new -x509 -days 365 -key ca.key -out ca.crt

req是创建一个请求,-key后接证书的私钥,-out后接输出,days指定证书有效期,如图:

175210课设第一周报告

175210课设第一周报告

查看证书内容

  • 打印证书的内容 openssl x509 -in ca.crt -noout -text -text是输出对象

175210课设第一周报告

  • 查看证书所有者信息 openssl x509 -in ca.crt -noout -subject

175210课设第一周报告

  • 查看证书序列号 openssl x509 -in ca.crt -noout -serial

175210课设第一周报告

  • 查看证书的 SHA 特征值(就是用SHA算法得到的哈希值) openssl x509 -sha1 -in ca.crt -noout -fingerprint

175210课设第一周报告

  • 查看证书公钥 openssl x509 -in ca.crt -pubkey -noout

175210课设第一周报告

学习并使用 openssl 工具

上文观察证书内容已经对openssl有介绍了,现在看看 openssl asn1parse命令。 用法如下:

openssl  asn1parse [-inform PEM|DER] [-in filename] [-out filename] [-noout] [-offset number] [-length number] [-i][ -dump ] [dlimit number] [-oid filename] [-strparse offset] [-genstr string ] [-genconf file]

选几个重要的参数看

-inform PEM|DER 指定输入内容的格式
-in filename 指定输入文件
-i 缩进

试一试 输入openssl asn1parse -i -in ca.crt,结果如下:

175210课设第一周报告

选一行37:d=3 hl=2 l= 9 prim: OBJECT

  • 37 表示节点在整个文件中的偏移长度
  • d=3 表示节点深度
  • hl=2 表示节点头字节长度
  • l=9 表示节点数据字节长度
  • prim 表示该节点为原始节点,包含数据 ( cons 表示该节点为结构节点,表示包含子节点或者子结构数据 )
  • OBJECT 是ASN.1 定义的数据类型

总结

本周任务完成。偏重于概念的理解和工具的使用。还需仔细研究 ASN.1 编码标准。

上一篇:Java通过JNI调用C++程序


下一篇:使用Spring Security组合x509证书和表单登录