从数字签名使用对象的角度分,目前的数字证书类型主要包括:个人身份证书、企业或机构身份证书、支付网关证书、服务器证书、安全电子邮件证书、个人代码签名证书,这些数字证书特点各有不同。
符合X.509标准的数字安全证书,证书中包含个人身份信息和个人的公钥,用于标识证书持有人的个人身份。数字安全证书和对应的私钥存储于E-key中,用于个人在网上进行合同签定、定单、录入审核、操作权限、支付信息等活动中标明身份。
符合X.509标准的数字安全证书,证书中包含企业信息和企业的公钥,用于标识证书持有企业的身份。数字安全证书和对应的私钥存储于E-key或IC卡中,可以用于企业在电子商务方面的对外活动,如合同签定、网上证券交易、交易支付信息等方面。
支付网关证书是证书签发中心针对支付网关签发的数字证书,是支付网关实现数据加解密的主要工具,用于数字签名和信息加密。支付网关证书仅用于支付网关提供的服务(Internet上各种安全协议与银行现有网络数据格式的转换)。支付网关证书只能在有效状态下使用。支付网关证书不可被申请者转让。
符合X.509标准的数字安全证书,证书中包含服务器信息和服务器的公钥,在网络通讯中用于标识和验证服务器的身份。数字安全证书和对应的私钥存储于E-key中。服务器软件利用证书机制保证与其他服务器或客户端通信时双方身份的真实性、安全性、可信任度等。
从数字证书的技术角度分,CA中心发放的证书分为两类:SSL证书和SET证书。一般地说,SSL证书(安全套接层)是服务于银行对企业或企业对企业的电子商务活动的;而SET(安全电子交易)证书则服务于持卡消费、网上购物。虽然它们都是用于识别身份和数字签名的证书,但它们的信任体系完全不同,而且所符合的标准也不一样。
1.3数字证书的格式
证书主要的文件类型和协议有:PEM、DER、PFX、JKS、KDB、CER、KEY、CSR、CRT、CRL、OCSP、SCEP等。
1.3.1PEM格式
Openssl使用PEM(PrivacyEnhancedMail)格式来存放各种信息,它是openssl默认采用的信息存放方式。Openssl中的PEM文件一般包含如下信息:内容类型:表明本文件存放的是什么信息内容,它的形式为“——-BEGINXXXX——”,与结尾的“——ENDXXXX——”对应。头信息:表明数据是如果被处理后存放,openssl中用的最多的是加密信息,比如加密算法以及初始化向量iv。信息体:为BASE64编码的数据。可以包括所有私钥(RSA和DSA)、公钥(RSA和DSA)和(x509)证书。它存储用Base64编码的DER格式数据,用ascii报头包围,因此适合系统之间的文本模式传输。使用PEM格式存储的证书:
辨别编码规则(DER)可包含所有私钥、公钥和证书。它是大多数浏览器的缺省格式,并按ASN1DER格式存储。它是无报头的-PEM是用文本报头包围的DER。PFX或P12–公钥加密标准#12(PKCS#12)可包含所有私钥、公钥和证书。其以二进制格式存储,也称为PFX文件。通常可以将Apache/OpenSSL使用的“KEY文件+CRT文件”格式合并转换为标准的PFX文件,你可以将PFX文件格式导入到微软IIS5/6、微软ISA、微软ExchangeServer等软件。转换时需要输入PFX文件的加密密码。
1.3.3JKS格式
通常可以将Apache/OpenSSL使用的“KEY文件+CRT文件”格式”转换为标准的JavaKeyStore(JKS)文件。JKS文件格式被广泛的应用在基于Java的WEB服务器、应用服务器、中间件。你可以将JKS文件导入到TOMCAT、WEBLOGIC等软件。
1.3.4KDB格式
通常可以将Apache/OpenSSL使用的“KEY文件+CRT文件”格式转换为标准的IBMKDB文件。KDB文件格式被广泛的应用在IBM的WEB服务器、应用服务器、中间件。你可以将KDB文件导入到IBMHTTPServer、IBMWebsphere等软件。
1.3.5CSR格式(证书请求文件CertificateSigningRequest)
1.3.6OCSP格式(在线证书状态协议OnlineCertificateStatusProtocol,rfc2560)
用于实时表明证书状态。OCSP客户端通过查询OCSP服务来确定一个证书的状态,可以提供给使用者一个或多个数字证书的有效性资料,它建立一个可实时响应的机制,让用户可以实时确认每一张证书的有效性,解决由CRL引发的安全问题。。OCSP可以通过HTTP协议来实现。rfc2560定义了OCSP客户端和服务端的消息格式。
1.3.7CRL格式(证书吊销列表CertificationRevocationList)
1.3.8SCEP(简单证书注册协议)
基于文件的证书登记方式需要从您的本地计算机将文本文件复制和粘贴到证书发布中心,和从证书发布中心复制和粘贴到您的本地计算机。SCEP可以自动处理这个过程但是CRLs仍然需要手工的在本地计算机和CA发布中心之间进行复制和粘贴。
1.3.9PKCS7(加密消息语法(pkcs7)
是各种消息存放的格式标准。这些消息包括:数据、签名数据、数字信封、签名数字信封、摘要数据和加密数据。
1.3.10PKCS12(个人数字证书标准,PublicKeyCryptographyStandards#12)
包含了公钥和私钥的二进制格式的证书形式,一般以pfx作为证书文件后缀名。用于存放用户证书、crl、用户私钥以及证书链,pkcs12中的私钥是加密存放的。
1.3.11CER一般指使用DER格式的证书
CER证书一般是以DER二进制编码的证书,证书中没有私钥,以*.cer作为证书文件后缀名。证书可以以BASE64编码输出,以Base64编码的证书证书中没有私钥,BASE64编码格式的证书文件,也是以*.cer作为证书文件后缀名。
1.3.12CRT证书文件,可以是PEM格式
1.3.13KEY一般指PEM格式的私钥文件
在生成数据证书是用户可选择不同的加密方式对数据进行加密,常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法。
2.1对称加密
在对称加密算法中,加密使用的密钥和解密使用的密钥是相同的。也就是说,加密和解密都是使用的同一个密钥。因此对称加密算法要保证安全性的话,密钥要做好保密,只能让使用的人知道,不能对外公开。在对称加密算法中,加密和解密都是使用同一个密钥,不区分公钥和私钥。
对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个,则整个企业共需要n×(n-1)个密钥,密钥的生成和分发将成为企业信息部门的恶梦。对称加密算法的安全性取决于加密密钥的保存情况,但要求企业中每一个持有密钥的人都保守秘密是不可能的,他们通常会有意无意的把密钥泄漏出去——如果一个用户使用的密钥被入侵者所获得,入侵者便可以读取该用户密钥加密的所有文档,如果整个企业共用一个加密密钥,那整个企业文档的保密性便无从谈起。
常见的对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES。DES是一种分组数据加密技术(先将数据分成固定长度的小数据块,之后进行加密),速度较快,适用于大量数据加密,而3DES是一种基于DES的加密算法,使用3个不同密匙对同一个分组数据块进行3次加密,如此以使得密文强度更高。相较于DES和3DES算法而言,AES算法有着更高的速度和资源使用效率,安全级别也较之更高了,被称为下一代加密标准。
2.2非对称加密
在非对称加密算法中,加密使用的密钥和解密使用的密钥是不相同的,也称为公私钥加密,也就是说加密使用的密钥和解密使用的密钥不同。
常见的非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、ElGamal、DSA(数字签名用)。RSA和DSA的安全性及其它各方面性能都差不多,而ECC较之则有着很多的性能优越,包括处理速度,带宽要求,存储空间等等。
2.3Hash算法
Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。
常见的Hash算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1。这几种算法只生成一串不可逆的密文,经常用其效验数据传输过程中是否经过修改,因为相同的生成算法对于同一明文只会生成唯一的密文,若相同算法生成的密文不同,则证明传输数据进行过了修改。通常在数据传说过程前,使用MD5和SHA1算法均需要发送和接收数据双方在数据传送之前就知道密匙生成算法,而HMAC与之不同的是需要生成一个密匙,发送方用此密匙对数据进行摘要处理(生成密文),接收方再利用此密匙对接收到的数据进行摘要处理,再判断生成的密文是否相同。加密算法的效能通常可以按照算法本身的复杂程度、密钥长度(密钥越长越安全)、加解密速度等来衡量。上述的算法中,除了DES密钥长度不够、MD2速度较慢已逐渐被淘汰外,其他算法仍在目前的加密系统产品中使用。
数字证书可以通过在线工具,脚本代码,KEYTOOL工具,OPENSSL工具等多种方式生成。下面以常用的RSA非对称加密为例子,向大家介绍几种常用的数字证书生成方式。
3.1利用KEYTOOL工具生成数字证书
3.1.1KEYTOOL命令介绍
KEYTOOL通是以keytool开关,当中常用命令有:
keytool-genkey-aliascasserver-keypasscas123-keyalgRSA-keystorecasserver.keystore-validity365keytool-export-aliascasserver-storepasscas123-filecasserver.cer-keystorecasserver.keystorekeytool-import-trustcacerts-aliascasserver-storepasscas123-filecasserver.cer–keystorecacerts3.1.2生成*.keystore文件流程
首先执行以下命令,分别输入密钥库口令、姓名,单位,组织,城市,省份,国家等信息,经确认后生成对应的leslie.keystore文件。注意*.keystore文件相当于一个资源库,后面的公钥、私钥、证书等都依赖于它生成,必须谨慎保管。
keytool-genkey-aliaseverygold-keypass123456-keyalgRSA-keystoreleslie.keystore-validity365提示:-alias指定别名为everygold;-keyalg指定RSA算法;-keypass指定私钥密码为123456;-keystore指定密钥文件名称为leslie.keystore;-validity指定有效期为365天。
3.1.3生成数字证书
根据上述生成的leslie.keystore文件,执行以下命令就可以生成数字证书leslie.cer
keytool-export-aliaseverygold-storepass123456-fileleslie.cer-keystoreleslie.keystore提示:-alias指定别名为everygold;-storepass指定私钥为123456;-file指定导出证书的文件名为leslie.cer;-keystore指定之前生成的密钥文件的文件名
注意:-alias和-storepass必须为生成leslie.keystore密钥文件时所指定的别名和密码一致,否则证书导出失败
生成证书
若需要获取BASE64或DER证书,可以使用导出功能,在图片上按“复制到文件”,选择文件格式即可。
以文本格式打开导出的BASE64证书,可以看到
或者使用以下语句,也可查看到导出的证书
keytool-list-rfc-keystored:/leslie.keystore-storepass123456显示结果与上述方法一致
3.2脚本代码生成证书
若对KEYTOOL工具不太熟悉的朋友,也可通过JAVA代码直接生成数字证书,原理与KEYTOOL生成的基本一致。
3.3利用在线工具获取数字证书
如果觉得使用KEYTOOL或代码生成数字证书过于繁琐,可以直接使用在线生成工具生成免费数字证书。一般在线生成的证书有效期为3个月到1年,到期后需要续费或证书无效。以下是几个常用的在线证书生成工具,由于用法比较简单,在此不作详细介绍。
在第二节已经介绍过,在加密算法中有对称加密,非对称加密,Hash算法等几类。在对称加密算法中,加密使用的密钥和解密使用的密钥是相同的,使用起来比较简单。而公钥与私钥一般用于非对称的加密方式,是安全性最高,使用最为频密的加密方式,下面几节,将为大家介绍一下非对称加密的使用方式。公钥(PublicKey)与私钥(PrivateKey)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥通常用于加密会话密钥、验证数字签名,加密数据可以用相应的私钥进行数据解密。通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥签名则必须用公钥验签,否则数据将不会成功生成。
由于使用KEYTOOL等工具无法直接导出公钥和私钥,所以必须通过代码进行导出。而公钥和私钥都是二进制数据,所以一般用Base64方式进行保存。下面以上述有证书为例子,导出对应的公钥与私钥。
为方便保存,一般我们会以Base64位方式把公钥与私钥存储起来publicKey.key公钥文件:
-----BEGINPUBLICKEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbUPe3WGFA0QPGCrPrXCUR7K7MaZQY1btYZrAFjpT/k00zkj/AfcUeEZk6Tf+9mgvZ3KRVvSFaA9kYiVCJOjGfnW2Hfk6u7iOwSs/kwpC5uUzdoWlc5ZX7iC9SACXJgDg/T5HBRpXpsEkxhzWLUKy1FQDCKduLuEFdzaO4XsSX7QIDAQAB-----ENDPUBLICKEY-----