《数字化身份-CertPath证书链.ppt》由会员分享,可在线阅读,更多相关《数字化身份-CertPath证书链.ppt(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第六章 数字化身份CertPath证书链主要内容n使用Keytool工具和JAVA程序创建并保存证书链n从证书文件、密钥库或HTTPS服务器获取证书链的CertPathn显示和保存证书链中的证书n验证证书链n使用CertStore来保存和提取证书n吊销证书证书链n证书链本质上是一组按顺序排列的数字证书,又称为认证链、证书路径。证书链证明了证书的合法性,证书链合法,则可以相信证书中所宣称的某个主体拥有某个公钥。n例如:A的证书由B颁发,B由C颁发,C由D颁发,这样就形成了一个4个证书组成的证书链:A-B-C-D.若要验证A的证书是否值得信任,只要检验者信任B,C,D中的任一个证书即可。密钥库中创
2、建并保存证书链的几种方法n1、使用Keytool将已签名的数字证书导入密钥库n使用-import参数可以将数字证书导入到密钥库,主要要先导入CA的证书n(1)将第五章的密钥库lfkeystore,mytest.cer,lf.cer,lf_signed.cer拷入一个文件夹n(2)若先导入lf_signed.cer会出错,因为CA mytest还没有导入,无法建立证书链。要先导入mytest.cer (3)最后导入lf_signed.cer覆盖自签名的lfn2、使用JAVA程序将已签名的数字证书导入到密钥库n例:首先读取CA的证书mytest.cer和用户收到的签名后的证书lf_signed.c
3、er,使用这两个证书组成证书链,然后从用户的密钥库读取私钥,最后执行KeyStore对象的SetKeyEntry()方法将私钥和证书一起写入密钥库,并用store()方法保存为文件即可。n先copy lfkeystore.bak.before.6.1.1 lfkeystorenJava ImportCert几种获取CertPath证书链的方法nCertPath类代表证书链n(1)根据证书文件生成CertPath类型的对象n例:用.cer文件生成CertPath类型的对象,并将其中所有的文件打印出来。Java GetCertPathCert lf_signed.cer mytest.cer1.t
4、xtn(2)从密钥库读取证书链生成CertPath类型的对象n1)获取相关参数n2)获取KeyStore对象并加载密钥库n3)从密钥库读取数组形式的证书链n4)生成列表对象n5)创建CertPath类型的对象n例:从密钥库中逐个读取证书形成密钥链并打印出来。Java GetCertPathtKs lfkeystore2 wshr.ut lf 2.txtnJava GetCertPathtKs lfkeystore newpass lf_signed3.txtn(3)从HTTPS服务器获取证书链n数字证书在网络上各种HTTPS服务器上用得很多,这些服务器对应的是https:/.格式的网址,一般使
5、用443作为端口号。n编程步骤:n1)创建SSLServerSocketFactory类型的对象。n2)创建SSLSocket类型的对象。n3)和HTTPS服务器建立连接n4)获取连接的会话n5)获取证书n6)将证书数组中的内容放入列表n7)由列表对象创建CertPath类型的对象n例:GetCertPathHttpsnjava GetCertPathHttps verisign.txtCertPath对象的证书显示和保存n(1)显示CertPath中的证书n1)获取CertPath类型的对象n2)从CertPath对象获取证书列表。n3)处理列表。n例:用.cer文件得到CertPath对象
6、,并提取该对象中包含的证书。nJava ShowCertPath lf_signed.cer mytest.cer xxx.txtn(2)保存CertPath中的证书n1)获取CertPath类型的对象n2)创建密钥库n3)获取CertPath中的证书数组n4)将CertPath中的证书写入密钥库。n5)保存密钥库n例:将CertPath对象中的证书保存到密钥库并进而导出到文件中。n运行Java StoreCert之后,将创建密钥库MyCertPathStore,可以用nKeytool list keystore MyCertPathStore查看密钥库的内容。结果截图验证CertPath证书
7、链n(1)验证主体和签发者n例:验证证书链中各个证书的签发者和证书链中后一个证书的主体名称是否匹配。n编程步骤:n1)获取证书数组n2)遍历证书数组n3)比较nJava ValiSubIssu my0.cer my1.cer my2.cern(2)验证签名n例:验证证书链中各个证书的签名是否正确。证书链中第i个证书是使用第i+1个证书的公钥来验证的。n1)获取待验证的证书数组。n2)获取根证书n3)遍历证书数组,读取公钥n4)验证证书的签名nJava ValiSign my0.cer my1.cer my2.cern(3)CertPathValidator类基于TrustAnchor验证证书链
8、n该种验证方法比较简单,只要给出CertPath对象和根证书,就可以直接完成对证书链的验证。n例:其他证书都用最后输入的最信任的证书来验证。n1)获取待验证的CertPath对象n2)读取最信任的CA的证书。n3)创建TrustAnchor对象n4)创建和设置PKIXPprameters对象n5)创建CertPathValidator对象n6)执行验证nJava ValidateCP my0.cer my1.cer my2.cern(4)CertPathValidator类基于密钥库验证证书链n例:将输入的.cer文件组成一个证书链,信任的CA使用的证书从密钥库中提取。n1)获取待验证的Cer
9、tPath对象n2)获取密钥库n3)创建和设置PKIXParameters对象n4)创建CertPathValidator对象n5)执行验证n6)显示和验证相关的信息。nJava ValidateCPKs lf_signed.cer lfkeystore2 wshr.ut使用CertStore对象保存和提取证书n尽管密钥库可以存储证书,但密钥库通常用于存放私钥和受信任的证书,大量非信任的证书或已吊销证书的清单一般通过CertStroe对象来访问。n CertStore类通过静态方法getInstance()创建对象,该方法最简单的用法有两个参数,第一个参数指定CertStore类型,即证书的存
10、储类型,可以是LDAP或Collection类型。前者将证书存在LDAP目录中,后者将证书保存在集合中。第二个参数是CertStore初始化参数,不同的CertStore类型使用的参数不同。如对于LDAP类型,可使用LDAPCertStoreParameters类,该类的构造器中传入存放证书的LDAP服务器的服务器名称、端口等信息。对于Collection类型,可使用CollectionCertStoreParameters类,该类的构造器传入保存有证书的集合对象。n(1)创建CertStroe对象。n例:通过.cer文件创建CertStroe对象。n1)得到存放证书的集合对象。n2)设置Ce
11、rtStore参数。n3)创建CertStore对象。nJava CStore my1.cer mytest.cern请观察217-219页的输出信息n(2)定义证书的选择标准njava.security.cert包中的X509CertSelector类可用于按照一定的规则选择X509Certificates类型的证书,尤其常用于从CertStore对象中提取证书,该类提供了一系列方法用于定义规则,同时提供match()方法来判定方法参数中的证书是否满足这些规则。n例:可以根据各种条件来设置规则,比如通过签发主体,有效日期,序列号等选择证书。n1)创建X509CertSelector对象n2)
12、设置规则n3)检验证书是否满足规则nJava DefineSelector mytest.cer 2013 1 1n(3)从CertStore中提取证书n例:可以根据各种条件来设置规则,比如通过签发主体,有效日期,序列号等提取证书。n1)获得CertStore对象n2)定义提取规则n3)提取证书n4)处理证书nJava MySelector mytest.cer my0.cer my1.cer my2.cer lf_signed.cer证书的吊销nCA在签发了某个证书后,可能因种种原因在证书没有过期之前就需要吊销对证书的签发。原因可能是CA发现被签发者不再值得信任,或签发者可能不小心丢失了私钥
13、而主动要求吊销私钥对应的证书。因此CA会周期性地公布已吊销证书的清单(CRL)(1)查看证书吊销清单常规信息n证书吊销清单可以从CA的主页上下载,它一般是一个文件名以“.crl”为后缀的文件。n1)获得CertificateFactory对象n2)读取清单文件n3)创建X509CRL对象n4)查看证书吊销清单n例:java ShowCRLInfo ecpki.crln(2)查看清单中被吊销的证书n通过JAVA程序查看证书吊销清单中被吊销的证书n1)获得X509CRL对象n2)获得吊销清单中各个条目的集合n3)从集合中提取出各个吊销清单条目n4)从吊销清单条目中提出对应的信息n例:java ShowCRLEntries NewClass2Individual.crlnjava ShowCRLEntries ecpki.crln(3)从CertStore对象中提取已吊销的证书n例:先将吊销清单存入CertStore对象,然后从中提取符合条件的证书吊销清单。n1)获得X509CRL的列表n2)获得CertStore对象n3)定义提取规则n4)提取证书n5)处理证书njava CRLSelector ecpki.crl NewClass2Individual.crl Class3Commercial.crl