1、PKI:一个服务器的框架,为颁发证书而推出一系列的软硬件措施,通常来支持大范围部署的基于公钥的技术。2、CA:一个中心授权机构(可信任的三方),它在一个网络中签名所有的公钥。3、RA:它就是一个CA的前端代理,减轻CA的负担,主要完成接收证书请求,验证请求着的身份4、证书:一个被CA签名的文档,用于绑定名字到公钥。其实,CA非常像我们生活中的公安局,我们通常都非常信任这个机构,而证书就像我们的身份证,需要被登记者颁发。
目前,我们所使用的标准格式为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、2048PKCS#7 是一个封装数据的标准,在一个PKCS#7 封装里边,可以放置一个用户证书和颁发的正好苏服务器的根证书。 用于签名和加密实体证书,并且发送给请求设备。
我们通常在建立VPN 的时候,喜欢用预共享密钥,因为它最简单,也方便排错,但是,它往往具有很大的安全隐患,因为,无论谁,只需要知道了预共享密钥的情况下,就可以与你建立起VPN 隧道,而VPN 设备它是不知道对方是否合法,只能通过预共享密钥来识别,后来,又出现了数字签名的方案。数字签名:使用私钥加密公钥解密完成数字签名,实现完整性校验、源认证、不可否认性1、A用一个散列函数计算重要的文件得到一个散列值2、A使用自己的私钥加密这个散列值,得到一个数字签名3、把重要文件和签名打包一起发送给B4、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 v32、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、IssuerUniqueIdentifier (颁发者唯一标识):这是一个选项,当多个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 中它在哪个阶段起作用呢。IKE第一阶段 5 6个包的交换过程:1、发起方会把用DH材料计算出来的散列值用自己的私钥进行加密,得到一个数字签名,还会携带自己的个人证书(包含个人信息与自己的公钥)hostname,一起发送给接收方2、接收方收到以后,利用根证书的公钥来解开 CA的签名,验证是否合法3、验证通过以后,检查发起方的hostname是否与发起方的个人信息是否匹配4、匹配后,利用发起方的公钥解开它的发起方用自己私钥加密的数字签名5、解开后,得到一个散列值,接收方在用相同的DH材料计算另外一个散列值,与接收方的对比,匹配了则认证通过6、这个过程是双向的,也就是A和B会采用同样的方法进行验证对方。