实习期学习一些签名和加密的知识:
------------------------暂时先这样,有时间了再整理。学习的方法: 先学习证书文件内容、结构,再针对问题进行学习
证书相关的知识:
1. 证书的结构大致是什么样的?
证书的机构分为三部分:
tbsCertificate: 包含 主题 和 发行者的名字,与主题联系起来的公开密钥,有效期和其他相关信息
signatureAlgorithm: 包含 CA签发证书使用的密码学算法标识符。
signatureValue: 包含对 tbsCertificate 的数字签名。TbsCertificate作为ASN.1编码的输入参数,签名结果值包括在证书的签名字段中。CA能证明tbsCertificate字段中信息的有效性,特别是,CA能够实现 公开密钥 和 证书的主题 绑定。
证书的主要字段包括:
1.版本号-------------证书的版本号 V1 V2 V3 (版本3的值为2)
2.标识符-------------证书的唯一标识符 (CA分配的一个整数)
3.签名算法----------证书的签名算法标识符
4.颁发者-------------颁发者可识别名
5.有效期-------------证书的有效期时间段
6.主题----------------证书拥有者的可识别名 Subject
7.主题公钥----------证书拥有者的公钥
8.颁发者标识符-----颁发者的唯一标识符 V2 V3
9.主题标识符--------主体的唯一标识符 V2 V3
10.扩展---------------证书的扩展项(可选的标准和可用扩展) 只出现在 版本3中
X.509 证书详细描述:
Certificate :: = SEQUENCE {
tbsCertificate TBSCertificate, -- 证书主体
signatureAlgorithm AlgorithmIdentifier, -- 证书签名算法标识
signatureValue BIT STRING -- 证书签名值,是使用signatureAlgorithm部分指定的签名算法对tbsCertificate证书主题部分签名后的值
}
————————————————————
TBSCertificate :: = SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1, -- 证书版本号
serialNumber CertificateSerialNumber, --- 证书序列号,对同一CA所颁发的证书,序列号唯一标识证书
signature AlgorithmIdentifier, -------- 证书签名算法标识
issuer Name, -------- 证书发行者名称
validity Validity, -------- 证书有效期
subject Name, -------- 证书主体名称
subjectPublicKeyInfo SubjectPublicKeyInfo, -------- 证书公钥
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
----------证书发行者ID(可选),只在证书版本2,3中才有
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
----------证书主体ID(可选),只在证书版本2,3中才有
extensions [3] EXPLICIT Extensions OPTIONAL
--------- 证书扩展段(可选),只在证书版本3中才有
}
————————————————————
AlgorithmIdentifier ::= SEQUENCE {
algorithm ONJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
——————————————-——————
BIT STRING : 证书签名值
1》版本号:默认为V1,有唯一标识(颁发者、使用者)的版本号为V2,有扩展的版本号为V3
1. ASN.1定义: Version ::= INTEGER { v1(0), v2(1) , v3(2) }
2》序列号:正整数,在一个CA中不能出现重复值、最大为20个字节
1. ASN.1 的定义:CertificateSerialNumber ::= INTEGER
3》签名算法:带参数的、用于给证书签名的算法,由于此信息在证书尾部的域Signature中还会出现,这里很少包含信息。q9
在实际的证书中看到了 签名算法 和 签名哈希算法==》怎么理解呢 q2
用来签名算法用来生成密钥对? 和 用来 签名哈希算法用来签名?
4》颁发者:(X.500中创建、签名证书的签证机构CA的名字)
1. ASN.1定义: Name ::= CHOICE { --only one possiblity for now --rdnSequence RDNSequence }
2. 作用:用来标识证书的颁发机构
3. 要求: 必须包含一个非空的DN(distinguished name)
4. 是由一组属性和属性值组成的
5》有效期:
1.ASN.1定义: Valitity ::= SEQUENCE { notBefore Time, notAfter Time }
Time ::= CHOICE { utcTime UTCTime,generalTime GeneralizedTime }
2.作用:由 开始时间 和 截止时间组成;在 开始时间 和 截止时间 范围内,CA负责管理证书状态、
3.UTCTime : YYMMDDHHMMSSZ 两个数字表示年份,表示1950年1月1日到2050年1月1日
4.GeneralizedTime:YYYYMMDDHHMMSSZ 2050年1月1日以后的时间
5.必须使用格林威治时间表示 Z代表Zulu
6》证书主题:(Subject代表证书拥有者)
1. 是公钥所有者的标识
2. 一个CA中每个实体的主题应该唯一 ,CA可以给同一个实体签发不同主题的多张证书(用来签名/加密)
3.字段不能为空的情况 : CA证书、CRL发布者证书
如果该字段为空,主题信息必须在subjectAltName扩展中,且此扩展为‘关键’
4.建议使用 PrintableString 和 UTF8String 编码方式
5. Email 信息建议放到subjectAltName 扩展中
7》公钥信息(Subject's public-key information): 包含 公钥 和 算法标识带有相关参数
8》唯一标识:由于X.500的名字被许多不同实体引用,因此用可选位串唯一标志区分。
1. 用于 主题 或 颁发者 名称重用情况下,做区分。
2. 5280不建议重用这些信息,所以不要使用这个内容。
10》证书扩展:
1. 为 证书用户 和 公钥 提供绑定更多属性的途径
2. 表现形式:
一个OID 和 一个 ASN1的结构
一个扩展只能出现一次
3. 关键与非关键:
扩展要么关键,要么不关键,关键扩展如果应用不能处理,证书会被拒绝,非关键扩展可被忽略
4.标准扩展:OID以2.5.29开头
11》签名(Signature): 用CA私钥对证书的所有域及这些域的Hash值一起加密。
12》DN的比较:(证书有效的域名)
1.比较属性的语义内容,可支持除UTF8String外的其他编码方式(3280只说比较UTF8String编码的二进制结果)
2.组成DN的各属性的顺序一致、个数一致
3.关于空格,按RFC4518 Secation 2.6.1,在非空格字符中间的多个空格会被认为是一个空格
-------针对问题学习:
1. 证书的结构大致是什么样的?
证书的机构分为三部分:
tbsCertificate: 包含 主题 和 发行者的名字,与主题联系起来的公开密钥,有效期和其他相关信息
signatureAlgorithm: 包含 CA签发证书使用的密码学算法标识符。
signatureValue: 包含对 tbsCertificate 的数字签名。TbsCertificate作为ASN.1编码的输入参数,签名结果值包括在证书的签名字段中。CA能证明tbsCertificate字段中信息的有效性,特别是,CA能够认证在证书中 公开密钥 和 证书的主题 绑定。
2.1 证书主题的结构;常用的缩略名cn,o,ou,st等代表什么意思;
一般的数字证书产品的主题通常含有如下字段:
公用名称 (Common Name) 简称:CN 字段,对于 SSL 证书,一般为网站域名或IP地址;而对于代码签名证书则为申请单位名称;而对于客户端证书则为证书申请者的姓名;
组织名称 (Organization Name) :简称:O 字段,对于 SSL 证书,一般为网站域名;而对于代码签名证书则为申请单位名称;而对于客户端单位证书则为证书申请者所在单位名称;
组织单位(Organization Unit):简称:OU字段,标识组织部门;
证书申请单位所在地:
所在国家 (Country) 简称:C 字段,只能是国家字母缩写,如中国:CN
所在省份 (State/Provice) 简称:S 字段
所在城市 (Locality) 简称:L 字段
其他一些字段:
电子邮件 (Email) 简称:E 字段
多个姓名字段 简称:G 字段
介绍:Description 字段
电话号码:Phone 字段,格式要求 + 国家区号 城市区号 电话号码,如: +86 732 88888888
地址:STREET 字段
邮政编码:PostalCode 字段
3. 能唯一标识证书的是什么?
发行者名字(颁发者身份)+ 证书序列号 : 因为 不同的CA可以分配相同的证书标识号
4.根证书与非根证书的区别?
根证书是一个机构,非根证书有所属。
1. 根证书是未被签名的公钥证书或自签名的证书(百度百科)
2. CA认证中心给自己颁发的证书,是信任链的起始点
5. Crl 是什么,作用是什么?
CRL(Certificate Revocation List):证书吊销列表。一个被签署的列表,它指定了一批证书发布者认为无效的证书,除了普通CRL外,还定义了一些CRL类型用于覆盖特殊领域的CRL。q11
解释: CRL一定是被CA所签署的,可以使用与签发证书相同的私钥,也可以使用专门的CRL签发私钥。CRL中包含了被吊销证书的序列号,也可能包含吊销原因。
可以不是本CA签署,如此一来,在扩展中 cRLIssuer 需要指定签署者,
如果是本CA签署,必须有CDP,且没有cRLIssuer。
CRL 的内容 和数据结构定义:
CRL版本号:版本号
CRL 签名算法:计算CRL的数字签名所用算法标识符
CRL 颁布者:CA的可识别名(DN)
本次更新时间:CRL的更新时间
下次更新时间:约定的下次更新时间,可以提前,不能拖延
注销的证书列表:仅列出被吊销证书的唯一序列号+扩展项
扩展项包含:理由代码、证书颁发者、控制指示代码、失效日期
为了保证CRL的真实性和完整性,CRL数据的后面附有颁发CRL 的CA对CRL的数字签名。
CRL的数据形成之后,将数据放到LDAP服务器上,供用户查询。为防止用户数据量庞大的情况,采用以下两种方式处理:
1. 使用分段的CRL,把庞大的CRL分成很多可控的片段,并允许一个CA的吊销信息通过多个CRL发布。在证书的扩展项中,有一个子项是CRL的发布点,用户通过查询证书的扩展性,获取指定的参数,来针对性的访问相应的CRL。
2. 建立远程的镜像LDAP服务器,多分布在大客户的所在地。CA的LDAP主服务器负责对镜像服务器进行定期数据更新,以便使镜像服务器的数据和主服务器一致。
设置镜像服务器的目的有三个:
服务器的响应时间:就近选择服务器,加载本地用户访问速度
处理大数据量访问: 对大量并发访问进行分流,减轻高峰时间LDAP主服务器的负载
数据备份功能:提供不间断服务
3. CRL的更新:如果是实时更新,需要占用大量的网络资源和服务器资源。
此时引入了增量CRL的概念,在CRL的更新操作时,不是对基本的CRL进行更新,而是对新产生的吊销信息进行添加。一般的更新周期为8小时。
证书吊销: 证书都具有一个指定的寿命,但CA可通过称为证书吊销的过程来缩短这一寿命。
CA发布一个证书吊销列表(CRL),列出被认为不能再使用的证书的序列号。
CRL指定的寿命通常比证书指定的寿命短很多。
CA也可以在CRL中加入证书吊销的理由。
它还可以加入被认为这种状态改变所适用的起始日期,并不是立即生效。
6. LDAP 是什么?
LDAP(Lightweight Directory Access Protocol): 轻量级目录访问协议,从X.500目录访问协议的基础上发展过来,目前是v3.0。
作废证书发布列表:用来提供查询服务,通过CRL发布到LDAP上,用户可以通过查询LDAP来判断证书是否已被撤销。
1. 目录服务:
目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈现树状组织数据。目录数据和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生就是用来查询的,就好像它的名字一样。
2. LDAP特点:
LDAP 的机构用树来表示,而不是用表格。正因为这样,就不能用SQL语句了。
LDAP可以很快地得到查询结果,不过在写方面,就慢得多。
LDAP提供了静态数据的快速查询方式。
Client/server 模型,Server 用来存储数据,Client提供操作目录信息树的工具。
LDAP是一种开发Internet标准,LDAP协议是跨平台的Interent协议
3. 关键字段:
1. Entry : 条目,也称记录项,是LDAP中最基础的颗粒,类比数据库中的记录。通常对LDAP的添加、删除、更改、检索都是以条目为基本对象的。
2.Attribute:每个条目有很多属性,用Attribute表示。
3. ObjectClass:对象类是属性的集合,LDAP预想了很多人员组织机构中常见的对象,并将其封装成对象类。
4. Scheme:对象类的集合。描述 条目 属性 值 的关系。
5. backend & database:IDAP 的后台进程可以有 slapd接收、相应请求,但实际存储数据、获取数据的操作是由Backends 做的,而数据是存放在database中。
6. TLS & SASL
分布式 LDAP 是以明文的格式通过网络来发送信息的,包括client访问Idap的密码,SSL/TLS的加密协议就是来保证数据传输的保密性和完整性。
7.SASL 简单身份验证安全框架,它能够实现openIdap客户端到服务端的用户验证.
8.LDIF : 是LDAP 数据库信息的一种文本格式,用于数据的导入导出,键值对形式。每行都是 “属性:值“对
7 . 在线查询机制---OCSP
1. 定义:在线证书状态协议----(Online Certificate Status Protocol)是 IETF 颁发的用于检查数字证书在某一交易时间是否有效的标准。提供了检验数字证书有效性的途径,比下载和处理证书注销列表(CRL)的传统方式更快、方便、独立性。
2. 用法:用户的客户机形成查询指定证书状态的请求,并将请求转发到一个OCSP应答器(服务器),应答器建立与CA证书库的连接,并查询CA证书库而获得证书的状态,应答器返回客户机有关证书有效性信息。
3. 一个OCSP请求,由协议版本号、服务请求类型及一个或多个证书标识符等信息组成;
响应信息是由证书标识符、证书状态(注销/有效/未知)、以及验证相应时间等信息所组成。响应信息必须经过数字签名,以保证信息的真实性和完整性。签名密钥属于CA,即用户可以信任这个信息。
OCSP 在线查询机制 只能检测证书的注销状态,没有其他功能。例如:不能检查证书的有效期,也不返回完整的证书。
OCSP的查询 要求用户保持在线状态,且访问的对象集中在CA的OCSP中,同样带来高并发,效率下降的问题。
附加信息:
1. 密钥生成:
1. 终端实体注册
2. 签名密钥对产生
3. 证书申请和密钥
4. 证书分发 : 一旦私钥 和 公钥证书产生即可进入颁发阶段。
5. 密钥备份
关于证书的一些操作:
1. 证书检索 远程资料库的证书检索
2. 证书验证 确定证书的有效性
3. 密钥恢复 不能正常解读加密文件时,从CA中恢复
4. 密钥更新 当一个合法的密钥对将要过期时,新的密钥对自动产生并颁发
2.密钥备份:备份由CA机构执行,
签名密钥对 由 签名私钥 和 验证公钥 组成。签名私钥不能做备份,一旦丢失,就重新生成新的密钥对,验证公钥需要做存档,以验证旧的签名有效。签名密钥对的生命期较长。
加密密钥对 由 加密公钥 和 解密密钥 组成。解密私钥应该进行备份,同时需要存档,以便任何时候解密历史数据, 加密公钥无须备份和存档,丢失之后,只需要重新产生密钥对。
3. 密钥恢复:
发生在证书颁发阶段,可以通过密钥恢复中心 或者 CA 完成,可以从远程设备恢复 ,也可以从本地设备恢复。任何综合管理协议都必须包括对这个能力的支持。
6. 证书签发;
离线发放,特别是 企业高级证书 ,在LDAP中添加信息后,给申请者产生一个参照号+认证码,放到保密信封中,通过可靠途径传递,企业高级证书申请人输入参照号 + 认证码,可以领取证书,存储到本地。
在线发放,通过Internet使用LDAP,在X.500目录服务器上下载证书。通过申请,直接显示 参照号+授权码,申请人登陆网站,安装Root CA证书,自助下载证书。
7. 证书撤销:密钥泄露、从属变更、终止使用、CA本身原因
一个证书的生命周期主要包括三个阶段,证书初始化注册阶段、颁发阶段、取消阶段。证书密钥备份和恢复发生在初始化注册阶段 和 证书颁发阶段。
证书注销列表处理:记录尚未过期但已声明作废的用户证书序列号,供证书使用者在认证对方时查询使用。
证书撤销是在正常过期之前由于密钥泄露或者证书所有者状态改变等情况导致证书颁发机构使证书作废。所以,PKI 必须提供一种 允许用户检查证书的撤销状态的状态机制。
目前的X.509允许下列三种情况:
1. 证书不可撤销
2. 颁发证书的认证机构撤销
3. 颁发证书的认证机构 授予 其他机构撤销的权限,并由其他机构撤销证书
X.509 说明的撤销机制使用了证书撤销列表(CRL),该规范也允许使用其他机制
信息发布;
1.私下分发:撤销信息的交换是 非正式 和 不可靠的。撤销通知可以通过电话或者E-mail 来传送,但不能保障撤销信息 可靠传送到每一个相关的个体。
缺点: 私下分发不具有可扩展性,只支持一个较小的用户群
撤销信息的专门分发是内在不可靠的,某些不可达
以 用户为中心的信任模型 与 大多数企业范围内的操作模型 不太相容,后者需要集中式控制
2.公开发布:PKI 的信息放到 一个公开且容易访问的地点。对于范围大的用户群,发布的吸引力是很大的、很正式的。