一、PKI 的组件
1、PKI:一个服务器的框架,为颁发证书而推出一系列的软硬件措施,通常来支持大范围部署的基于公钥的技术。
2、CA:一个中心授权机构(可信任的三方),它在一个网络中签名所有的公钥。
3、RA:它就是一个 CA 的前端代理,减轻 CA 的负担,主要完成接收证书请求,验证请求着的身份
4、证书:一个被 CA 签名的文档,用于绑定名字到公钥
其实,CA 非常像我们生活中的公安局,我们通常都非常信任这个机构,而证书就像我们的身份证,需要被登记或者颁发。
二、PKI 标准
目前,我们所使用的标准格式为 x.509v3,它由多个字段组成一张数字证书,数字证书具有合法性和权威性,比如,证书签发
者的名称、主体的公钥信息、CA 对证书的数字签名、证书的有效期
Distinguished Name:目录命名的方式为 DN,比如 cn=user1, ou=cciese, dc=cciese, dc=com (微软的 AD 就采用这种
架构)
我们常常听到关于 PKCS#10 和 7,它们到底起什么作用?
PKCS#10 公钥加密标准,定义了当一台设备建立和请求个人证书时,设备需要包括和使用的实际信息的内容和格式,主要为
用户提供离线申请方式
CN 或者 DN:名字或者可区分的名字,这是必选的
可选的包括 |组织单位(OU)、组织(O)、地点(L)、省市(LP)、国家(CN)、主体可选名字(FQDN)、EMAIL
(E))
密钥大小:建立公私钥对的密钥大小。通常为 512、768、1024、2048
PKCS#7 是一个封装数据的标准,在一个 PKCS#7 封装里边,可以放置一个用户证书和颁发服务器的根证书。 用于
签名和加密实体证书,并且发送给请求设备。
三、PKI 解决了什么问题?
我们通常在建立 VPN 的时候,喜欢用预共享密钥,因为它最简单,也方便排错,但是,它往往具有很大的安全隐患,因为,
无论谁,只需要知道了预共享密钥的情况下,就可以与你建立起 VPN 隧道,而 VPN 设备它是不知道对方是否合法,只能通过
预共享密钥来识别,后来,又出现了数字签名的方案。
数字签名:使用私钥加密公钥解密完成数字签名,实现完整性校验、源认证、不可否认性
1、A 用一个散列函数计算重要的文件得到一个散列值
2、A 使用自己的私钥加密这个散列值,得到一个数字签名
3、把重要文件和签名打包一起发送给 B
4、B 收到以后,使用相同的散列函数对重要文件进行计算,得到的一个散列值的结果
5、B 利用 A 的公钥对发送过来的数字签名进行解密,得到 A 计算的散列值结果
6、B 把自己算出来的散列值结果与A的进行比较吗,如果相同,说明是合法的。
存在的问题:在使用任何 RSA 的服务器之前,一个实体需要获取其他实体的公钥。那么,我们怎么能确定对方的公钥一定是那
个实体的呢。
在传统解决颁发就是,当一个公钥通过在线方式发送给对方的时候,首先做一个 HASH,在线方式可以是 QQ、邮件,当对方
收到这个公钥后,也用同样的方法做一个 HASH,然后通过离线的方式做确认,比如,电话。
这样的办法,虽然安全,但是不存在扩展性,因为实体认证一多,那么就需要离线确认多个,这样不太现实。
那么 PKI 解决的就是这一个问题,公钥分发管理的问题,它以一个第三方信任机构的角色存在。
可信任的第三方协议:
1、基于对公钥的数字签名
2、每一个实体信任的一个中心的权威机构
1)信任是基于数字签名的
2)中心授权机构的签名都被认为是可信的
3)每一个实体都有中心授权机构的公钥,用户验证它的签名
3、中心授权机构对每一个实体的公钥进行签名
四、证书的申请方式
申请的方式可分为离线和在线的方式进行证书申请,什么时候用到在线申请和离线呢?
如果,我们能与 CA 服务器进行正常通信的话,那么就利用在线申请方式申请,通常 CA 服务器是在内部存在的。 离线方式是经常出差的员工,或者合作伙伴来申
请证书,必须通过离线的方式进行申请,因为它不能正常的访问到 CA 服务器
在线方式:
SCEP:简单证书在线注册协议.使用 HTTP 在与设备之间共享信息。设备可以通过 URL 来访问 CA,也可以通过这
个来申请证书。CA 使用 PKCS#7 的格式发送给设备。SCEP 可以自动下载 CRL,常见的为 HTTP、HTTPS、LDAP,由 cisco
设计的技术,主要为 VPN 设备提供的 PKI 证书申请的工业标准。
SCEP,PKCS#7,PKCS#10: 使用 SCEP 进行证书申请的时候,同时会使用 PKCS#7 和 PKCS#10,PKCS#10 对证书请求进
行编码,PKCS#7 对 PKCS#10 的请求的内容,或者请求得到的证书进行封装
PKCS#12:用于在一个单一文件交换公共和私有对象(公钥、私钥、证书),它可以包含证书和关联的私钥。它提供了一个加
密机制(在 IOS 上做 CA 服务器的时候,输入的密码),因此私钥是能够被保护的,Cisco 优先使用这个模式来承载 PKI 资料。
(微软使用的为.pfx,cisco 为.p12,存放在 nvram 里面,可以 dir 查看)
离线方式:
设备产生 PKCS#10 信息,以离线的方式发送给管理员,然后由管理员在 CA 服务器上建立一个 x.509 的实体证书,
以.cer 或者 PEM的文件,以电子邮件形式发送给请求者。
CA 管理员可以通过两种方式来颁发证书: 1、随机数口令 2、手动验证
吊销方式:
当某些时候,一个员工离职了,或者对等体设备不可用了,我们需要把一些合法的证书销毁掉,那么其余的正常人员怎么知道
哪些证书合法、哪些不合法。那么就通过吊销列表方式,它会存储在 CA 服务器上或者是其余的外部数据库中,客户端会周期
性的下载这个最新的 CRL 来获取最新的
CRL:证书吊销列表,类似于通缉布告,用于告诉用户哪些证书是合法的,哪些证书已经被吊销了,客户会周期性的轮询 CRL
存储位置(http/ldap/ftp)获取当前 CRL
1、一旦吊销了证书,新的 CRL 就会颁发,但是不会被客户马上获取,需要等待老的 CRL 超期,从会获取新的 (cisco 默认为
4 小时缓存,在此期间,都会根据本地缓存的 CRL 来确认对方证书是否被吊销了,只有缓存到期后,从会轮询新的 CRL 到本地
缓存中)
2、这个吊销列表会包含有效期和服务器的签名。
3、在设计中,建议把 CRL 的本地缓存时间改为短点,因为很有可能在这个缓存期内,服务器已经吊销了一些证书,但是本地
缓存中还认为这些证书是有效的,这样就存在时间差了。
OCSP:在线式吊销状态查询协议,一种新的获取 CRL 的技术,但是 cisco IOS CA 不支持,微软的服务器支持
证书服务器的角色和功能:证书服务器(CA)的主要目的是验证证书请求和颁发证书。证书服务器是整个 PKI 系统中最为重要
的一个环节,一旦证书服务器被破环,整个 PKI 的运用将不再收到信任
CA 的分类:
1、我们常常访问一些商业性的网站,比如淘宝、网银这些,它们的证书为什么都是合法的呢,因为它像是向合法
的 PKI 机构申请的,这些合法的机构是受整个 Intenet 信任的,比如,微软的 IE 中默认就有许多的受信任的颁发机构,这些机
构是盈利性的,而且价格不便宜。这种我们称为公有 CA。
2、私有 CA:通常就是我们内部搭建的 CA 服务器,只用于企业内部的应用,比如 dot1x、给 VPN 设备颁发证书,给企业用
户颁发证书。
证书中包含的内容
数字证书包含的主要内容:
1、Identity (个人信息)
2、Some attributes(一些属性,限制证书的使用)
3、Public key(公钥)
4、Signature(证书服务器的数字签名)
证书的典型组成部分:
1、Version(版本):最新的版本为 x.509 v3
2、Serial Number (序列号):唯一标识某一证书服务器所颁发的证书
3、Algorithm ID(签名算法):标识证书服务器签名证书时使用的具体算法
4、Issuer(颁发着):颁发证书的证书服务器的个人信息
5、Validity Period(有效期):证书有效期
6、Subject Name(使用者):使用者的个人信息,使用 x.500 DN 的命名格式
7、Public Key Algorithm (公钥算法) 公钥的算法,主要有 RSA 和 DSA
8、Subject Public Key (公钥):使用者拥有的公钥。
9、Subject Unique Identifier (使用者唯一标识):这是一个选项,当多个使用者使用相同名字时使用
10、Issuer Unique Identifier (颁发者唯一标识):这是一个选项,当多个 CA 使用相同的名字时使用。
11、Cerfificate Signature Algorithm(证书签名算法):CA 服务器签名证书时所使用的算法
12、Certificate Signature(证书签名):证书服务器对颁发的证书所做的签名
五、PKI 的处理流程,在这个过程中时间是非常重要的。强烈建议部署 NTP V3 的服务
1、同步时间:时间在整个 PKI 系统中是非常重要的,如果时间错误了,那么整个 PKI 系统就会无效,所以,在部署 PKI 之前,
必须确定时间是正确的。
2 、客户端产生密钥对:在申请证书之前,实体需要产生密钥对,通常我们使用 RSA 算法,可以是一个加密,一个签名,也可
以是一对加密,一对签名。
3 、每一实体必须获取证书服务器的根证书,这个根证书包含 CA 的公钥,我们通常需要离线确认这个根证书是否是合法的。
4、每个实体提交自己的公钥和个人信息给 CA(申请个人证书)
5、CA 收到 A 和 B 的申请后,会把各自的公钥和个人信息做一个 hash,然后用自己的私钥对这个 hash 进行数字签名,我们
称这个为数字证书。 证书中至少包含各自的公钥、个人信息和数字签名。
6、CA 把进行了数字签名的证书发送给 A和 B,离线或者在线方式
7、A 和 B 收到自己的个人证书后,它就拥有了 CA的根证书和自己的个人证书
分析:为什么我们谈到 CA 证书的时候,一定是两张证书,必须拥有 CA 的根证书呢,我们假设一下,这时候一个对方的 VPN
设备利用数字证书来进行设备验证,那么对方的数字证书中包含 CA 的数字签名,这个签名是加密的,必须通过 CA 的公钥来
解密,CA 的公钥放在哪? 对咯,就是根证书里面,只有获取了 CA 的根证书才有公钥,有了公钥就能解开这个签名。
六、数字证书在 VPN 的交换过程
之前提到过数字证书只是解决了公钥管理的问题,那么在 VPN 中它在哪个阶段起作用呢。
IKE 第一阶段 5 6 个包的交换过程:
1、发起方会把用 DH 材料计算出来的散列值用自己的私钥进行加密,得到一个数字签名,还会携带自己的个人证书(包含个人信息与自己的公钥)hostname,一起发送给接收方
2、接收方收到以后,利用根证书的公钥来解开 CA 的签名,验证是否合法
3、验证通过以后,检查发起方的 hostname 是否与发起方的个人信息是否匹配
4、匹配后,利用发起方的公钥解开它的发起方用自己私钥加密的数字签名
5、解开后,得到一个散列值,接收方在用相同的 DH 材料计算另外一个散列值,与接收方的对
比,匹配了则认证通过
6、这个过程是双向的,也就是 A 和 B 会采用同样的方法进行验证对方。
七、扩展