数字证书
数字证书(DigitalCertificate)
数字证书又名公钥证书(public keycertificate), 它是一种用于电脑身份识别的机制。数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个印章(或者说加在数字身份证上的一个签名),这一行为表示身份认证机构已经认定这个持证人。
证书一般是由证书认证机构(CA,certificate authority)颁发。有名的证书认证机构有VeriSign, GoDaddy和Comodo.一般颁发流程为:
1.申请人提出证书申请(certificatesigning request, CSR):
首先,申请人先生成一对密钥对(keypair),即一个私钥和一个公钥。要保证私钥的安全不被泄露。
然后生成申请文件(CSR),该文件包含了申请人信息(如:网站名,邮件地址,公司信息等)和公钥。私钥不被包含在CSR里面,但是整个CSR需要用私钥来数字签名。
2.CA机构审批。审批通过后,将生成一个证书发送给申请人。证书是被CA机构的私钥签名过的。
证书也可以由自己颁发,也就是自签名证书(self-signed certificate)
一个典型证书包含的信息有:
序列号(Serial Number): 证书的唯一标识.
主题(Subject): 人或者被鉴别的实体.
签名算法(Signature Algorithm):创建签名的算法.
颁发机构(Issuer): 验证申请人信息并颁发证书的机构.
生效日期(Valid-From): 证书生效的起始日期
过期日(Valid-To): 证书过期日.
用途(Key-Usage):公钥的目的(比如加密,签名,证书签字…). 可能是证书里面的公钥可以用于多种目的
公钥(Public Key):当使用HTTPS的时候,SSL的目的不仅仅是加密通信内容,还可以用来验证网站的主人是谁. 即公钥具有加密和验证功能.
指纹算法(Thumbprint Algorithm): 证书中使用的hash算法.
指纹(Thumbprint): 哈希值,用于保证本证书没有被篡改过
一个证书的样例(解码之后):
Certificate: Data: Version: 1 (0x0) Serial Number: 7829 (0x1e95) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/emailAddress=server-certs@thawte.com Validity Not Before: Jul 9 16:04:02 1998 GMT Not After : Jul 9 16:04:02 1999 GMT Subject: C=US, ST=Maryland, L=Pasadena, O=Brent Baccala, OU=FreeSoft, CN=www.freesoft.org/emailAddress=baccala@freesoft.org Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b4:31:98:0a:c4:bc:62:c1:88:aa:dc:b0:c8:bb: 33:35:19:d5:0c:64:b9:3d:41:b2:96:fc:f3:31:e1: 66:36:d0:8e:56:12:44:ba:75:eb:e8:1c:9c:5b:66: 70:33:52:14:c9:ec:4f:91:51:70:39:de:53:85:17: 16:94:6e:ee:f4:d5:6f:d5:ca:b3:47:5e:1b:0c:7b: c5:cc:2b:6b:c1:90:c3:16:31:0d:bf:7a:c7:47:77: 8f:a0:21:c7:4c:d0:16:65:00:c1:0f:d7:b8:80:e3: d2:75:6b:c1:ea:9e:5c:5c:ea:7d:c1:a1:10:bc:b8: e8:35:1c:9e:27:52:7e:41:8f Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption 93:5f:8f:5f:c5:af:bf:0a:ab:a5:6d:fb:24:5f:b6:59:5d:9d: 92:2e:4a:1b:8b:ac:7d:99:17:5d:cd:19:f6:ad:ef:63:2f:92: ab:2f:4b:cf:0a:13:90:ee:2c:0e:43:03:be:f6:ea:8e:9c:67: d0:a2:40:03:f7:ef:6a:15:09:79:a9:46:ed:b7:16:1b:41:72: 0d:19:aa:ad:dd:9a:df:ab:97:50:65:f5:5e:85:a6:ef:19:d1: 5a:de:9d:ea:63:cd:cb:cc:6d:5d:01:85:b5:6d:c8:f3:d9:f7: 8f:0e:fc:ba:1f:34:e9:96:6e:6c:cf:f2:ef:9b:bf:de:b5:22: 68:9f |
一个自签名证书样例(解码之后):
Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/emailAddress=server-certs@thawte.com Validity Not Before: Aug 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/emailAddress=server-certs@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d3:a4:50:6e:c8:ff:56:6b:e6:cf:5d:b6:ea:0c: 68:75:47:a2:aa:c2:da:84:25:fc:a8:f4:47:51:da: 85:b5:20:74:94:86:1e:0f:75:c9:e9:08:61:f5:06: 6d:30:6e:15:19:02:e9:52:c0:62:db:4d:99:9e:e2: 6a:0c:44:38:cd:fe:be:e3:64:09:70:c5:fe:b1:6b: 29:b6:2f:49:c8:3b:d4:27:04:25:10:97:2f:e7:90: 6d:c0:28:42:99:d7:4c:43:de:c3:f5:21:6d:54:9f: 5d:c3:58:e1:c0:e4:d9:5b:b0:b8:dc:b4:7b:df:36: 3a:c2:b5:66:22:12:d6:87:0d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 07:fa:4c:69:5c:fb:95:cc:46:ee:85:83:4d:21:30:8e:ca:d9: a8:6f:49:1a:e6:da:51:e3:60:70:6c:84:61:11:a1:1a:c8:48: 3e:59:43:7d:4f:95:3d:a1:8b:b7:0b:62:98:7a:75:8a:dd:88: 4e:4e:9e:40:db:a8:cc:32:74:b9:6f:0d:c6:e3:b3:44:0b:d9: 8a:6f:9a:29:9b:99:18:28:3b:d1:e3:40:28:9a:5a:3c:d5:b5: e7:20:1b:8b:ca:a4:ab:8d:e9:51:d9:e2:4c:2c:59:a9:da:b9: b2:75:1b:f6:42:f2:ef:c7:f2:18:f9:89:bc:a3:ff:8a:23:2e: 70:47 |
自签名证书的发布者和主题是一样的,说明是自己颁发给自己的。
签名申请(CSR)的样例:
-----BEGIN CERTIFICATE REQUEST----- MIIBnTCCAQYCAQAwXTELMAkGA1UEBhMCU0cxETAPBgNVBAoTCE0yQ3J5cHRvMRIw EAYDVQQDEwlsb2NhbGhvc3QxJzAlBgkqhkiG9w0BCQEWGGFkbWluQHNlcnZlci5l eGFtcGxlLmRvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAr1nYY1Qrll1r uB/FqlCRrr5nvupdIN+3wF7q915tvEQoc74bnu6b8IbbGRMhzdzmvQ4SzFfVEAuM MuTHeybPq5th7YDrTNizKKxOBnqE2KYuX9X22A1Kh49soJJFg6kPb9MUgiZBiMlv tb7K3CHfgw5WagWnLl8Lb+ccvKZZl+8CAwEAAaAAMA0GCSqGSIb3DQEBBAUAA4GB AHpoRp5YS55CZpy+wdigQEwjL/wSluvo+WjtpvP0YoBMJu4VMKeZi405R7o8oEwi PdlrrliKNknFmHKIaCKTLRcU59ScA6ADEIWUzqmUzP5Cs6jrSRo3NKfg1bd09D1K 9rsQkRc9Urv9mRBIsredGnYECNeRaK5R1yzpOowninXC -----END CERTIFICATE REQUEST----- |
签名申请(解析过后)
0:d=0 hl=4 l= 413 cons: SEQUENCE 4:d=1 hl=4 l= 262 cons: SEQUENCE 8:d=2 hl=2 l= 1 prim: INTEGER :00 11:d=2 hl=2 l= 93 cons: SEQUENCE 13:d=3 hl=2 l= 11 cons: SET 15:d=4 hl=2 l= 9 cons: SEQUENCE 17:d=5 hl=2 l= 3 prim: OBJECT :countryName 22:d=5 hl=2 l= 2 prim: PRINTABLESTRING :SG 26:d=3 hl=2 l= 17 cons: SET 28:d=4 hl=2 l= 15 cons: SEQUENCE 30:d=5 hl=2 l= 3 prim: OBJECT :organizationName 35:d=5 hl=2 l= 8 prim: PRINTABLESTRING :M2Crypto 45:d=3 hl=2 l= 18 cons: SET 47:d=4 hl=2 l= 16 cons: SEQUENCE 49:d=5 hl=2 l= 3 prim: OBJECT :commonName 54:d=5 hl=2 l= 9 prim: PRINTABLESTRING :localhost 65:d=3 hl=2 l= 39 cons: SET 67:d=4 hl=2 l= 37 cons: SEQUENCE 69:d=5 hl=2 l= 9 prim: OBJECT :emailAddress 80:d=5 hl=2 l= 24 prim: IA5STRING :admin@server.example.dom 106:d=2 hl=3 l= 159 cons: SEQUENCE 109:d=3 hl=2 l= 13 cons: SEQUENCE 111:d=4 hl=2 l= 9 prim: OBJECT :rsaEncryption 122:d=4 hl=2 l= 0 prim: NULL 124:d=3 hl=3 l= 141 prim: BIT STRING 268:d=2 hl=2 l= 0 cons: cont [ 0 ] 270:d=1 hl=2 l= 13 cons: SEQUENCE 272:d=2 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption 283:d=2 hl=2 l= 0 prim: NULL 285:d=1 hl=3 l= 129 prim: BIT STRING |
解析命令:penssl asn1parse-inyour_request
数字签名
数字签名(DigitalSignature)是用于验证数字信息或者数字文档真实性的数学模型。主要用于软件发布、金融交易等地方。
数字签名常被用作电子签名(electronicsignatures),但不是所有的电子签名都用数字签名。
电子签名使用了一种不对称加密方法。信息通过安全通道传输,一个适当的数字签名能够使接受者相信这个信息的确是从该信息所声称的发送人发送过来的。在很多方面,它等同于手工签名。
被签名的信息可以是任意字符串,比如电子邮件,联系方式或者通过加密协议发送的信息。
数字签名模型一般包含三个算法
1.密钥生成算法(key generationalgorithm): 该算法生成一个密钥对,即一个私钥和一个对应的公钥。
2.签名算法(signingalgorithm):给定一条信息和一个私钥,生成签名。
3.签名验证算法(signatureverifying algorithm): 给定一条信息、一个公钥和一个签名,判断该信息是否由签名者发布。
该模型有两个基本特性:
1.验证签名的真实性必须有原私钥对应的公钥。
2.没有私钥无法生成有效签名。
(数字签名和验证示意图)
下面是证书的使用过程
大图见:http://upload.wikimedia.org/wikipedia/en/9/96/Usage-of-Digital-Certificate.svg
RSA
RSA是一个公钥密码算法(algorithm for public-keycryptography)。最初由Rivest,Shamir和Adleman三个人提出并公布,因此用三个人名字的首字母命名,即RSA。
RSA算法包括三个步骤:密钥生成,加密和解密。
密钥生成
RSA包含一个公钥和一个私钥。公钥可以让任何人知道。被公钥加密过的信息只能有私钥解密。被私钥加密过的数据只能被公钥解密。
加密
用公钥(或者私钥)加密数据。
解密
用私钥(或者公钥)解密数据
基于公开密钥的加密过程
比如有两个用户Alice和Bob,Alice想把一段明文通过双钥加密的技术发送给Bob,Bob有一对公钥和私钥,那么加密解密的过程如下:
1.Bob将他的公开密钥传送给Alice。
2.Alice用Bob的公开密钥加密她的消息,然后传送给Bob。
3.Bob用他的私人密钥解密Alice的消息。
上面的过程可以用下图表示,Alice使用Bob的公钥进行加密,Bob用自己的私钥进行解密。
基于公开密钥的认证过程
身份认证和加密就不同了,主要用户鉴别用户的真伪。这里我们只要能够鉴别一个用户的私钥是正确的,就可以鉴别这个用户的真伪。
还是Alice和Bob这两个用户,Alice想让Bob知道自己是真实的Alice,而不是假冒的,因此Alice只要使用公钥密码学对文件签名发送给Bob,Bob使用Alice的公钥对文件进行解密,如果可以解密成功,则证明Alice的私钥是正确的,因而就完成了对Alice的身份鉴别。整个身份认证的过程如下:
1.Alice用她的私人密钥对文件加密,从而对文件签名。
2.Alice将签名的文件传送给Bob。
3.Bob用Alice的公钥解密文件,从而验证签名。
上面的过程可以用下图表示,Alice使用自己的私钥加密,Bob用Alice的公钥进行解密。
PKCS
在密码学里,PKCS是指一组公钥加密标准(public-key cryptography standards).其中PKCS10是用于证书请求(Certification Request)的标准. 即证书申请人需要按此标准生成证书申请文件,发送给CA审批。
参考文档
http://pepa.javaeye.com/blog/250991
http://en.wikipedia.org/wiki/X.509
http://en.wikipedia.org/wiki/Digital_Signature
http://en.wikipedia.org/wiki/RSA
http://www.williamlong.info/archives/837.html