欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

openSSL 命令、PKI、CA、SSL 证书原理

最编程 2024-06-29 14:17:15
...

相关学习资料

http://baike.baidu.com/view/7615.htm?fr=aladdin
http://www.ibm.com/developerworks/cn/security/se-pkiusing/index.html?ca=drs
http://www.ibm.com/developerworks/cn/security/s-pki/
http://en.wikipedia.org/wiki/X.509
http://zh.wikipedia.org/wiki/PKCS
http://blog.****.net/rztyfx/article/details/6919220
http://weekend.blog.163.com/blog/static/7468958201131591422649/
http://linux.chinaunix.net/techdoc/beginner/2009/06/29/1120721.shtml
http://www.360doc.com/content/12/0414/19/3725126_203594495.shtml
http://blog.sina.com.cn/s/blog_436fe8b10100r5p3.html
http://blog.****.net/allwtg/article/details/4982507
http://rhythm-zju.blog.163.com/blog/static/310042008015115718637/
http://www.mike.org.cn/articles/ubuntu-config-apache-https/

 

目录

1. PKI、CA简介
2. SSL证书
3. SSL证书生成、openSSL学习 
4. CA中心搭建、SSL证书生成过程

 

1. PKI、CA简介

PKI(Public Key Infrastructure)即"公钥基础设施",是一种遵循既定标准的密钥管理平台,它能够为所有网络应用提供加密和数字签名等密码服务及所必需的密钥和证书管理体系,简单来说,PKI就是利用公钥理论和技术建立的提供安全服务的基础设施。PKI技术是信息安全技术的核心,也是电子商务的关键和基础技术。

PKI是Public Key Infrastructure的缩写,是指用公钥概念和技术来实施和提供安全服务的具有普适性的安全基础设施。这个定义涵盖的内容比较宽,原则上说,任何以公钥技术为基础的安全基础设施都是PKI。当然,没有好的非对称算法和好的密钥管理就不可能提供完善的安全服务,也就不能叫做PKI。也就是说,该定义中已经隐含了必须具有的密钥管理功能。

PKI既不是一个协议,也不是一个软件,它是一个标准,在这个标准之下发展出的为了实现安全基础服务目的的技术统称为PKI

PKI主要由以下组件组成

1. 认证中心CA(证书签发) 
CA是PKI的"核心",即数字证书的申请及签发机关,CA必须具备权威性的特征,它负责管理PKI结构下的所有用户(包括各种应用程序)的证书,把用户的公钥和用户的其他信息捆绑在一起,在网上
验证用户的身份,CA还要负责用户证书的黑名单登记和黑名单发布
2. X.500目录服务器(证书保存) X.500目录服务器用于"发布"用户的证书和黑名单信息,用户可通过标准的LDAP协议查询自己或其他人的证书和下载黑名单信息。 3. 具有高强度密码算法(SSL)的安全WWW服务器(即配置了HTTPS的apache) Secure socket layer(SSL)协议最初由Netscape 企业发展,现已成为网络用来鉴别网站和网页浏览者身份,以及在浏览器使用者及网页服务器之间进行加密通讯的全球化标准。 4. Web(安全通信平台) Web有Web Client端和Web Server端两部分,分别安装在客户端和服务器端,通过具有高强度密码算法的SSL 协议保证客户端和服务器端数据的机密性、完整性、身份验证。 5. 自开发安全应用系统 自开发安全应用系统是指各行业自开发的各种具体应用系统,例如银行、证券的应用系统等。完整的PKI包括: 1) 认证政策的制定,包括 1.1) 遵循的技术标准 1.2) 各CA 之间的上下级或同级关系 1.3) 安全策略 1.4) 安全程度 1.5) 服务对象 1.6) 管理原则和框架等 2) 认证规则 3) 运作制度的制定 4) 所涉及的各方法律关系内容 5) 技术的实现等

认证中心CA作为PKI的核心部分,CA实现了PKI 中一些很重要的功能

1. 接收验证最终用户数字证书的申请
2. 确定是否接受最终用户数字证书的申请-证书的审批
3. 向申请者颁发、拒绝颁发数字证书-证书的发放
4. 接收、处理最终用户的数字证书更新请求-证书的更新
5. 接收最终用户数字证书的查询、撤销
6. 产生和发布证书废止列表(CRL)
7. 数字证书的归档
8. 密钥归档
9. 历史数据归档

在这么多功能中,CA的核心功能就是"发放"和"管理"数字证书,同时这也是PKI的核心

图2 典型CA框架模型

典型CA框架模型 

1. 安全服务器:
安全服务器面向普通用户,用于提供:
    1) 证书申请
    2) 浏览
    3) 证书撤消列表
    4) 证书下载等安全服务
安全服务器与用户的的通信采取安全信道方式(如SSL的方式,不需要对用户进行身份认证)。用户首先得到安全服务器的证书(该证书由CA颁发),然后用户与服务器之间的所有通信,包括用户填
写的申请信息以及浏览器生成的公钥均以安全服务器的密钥进行加密传输,只有安全服务器利用自己的私钥解密才能得到明文,这样可以防止其他人通过窃听得到明文。从而保证了证书申请和传输
过程中的信息安全性。
2. CA服务器 CA服务器是整个证书机构的核心,负责: 1) 证书的签发 1.1) 产生自身的私钥和公钥(密钥长度至少为1024位) 1.2) 然后生成根数字证书,并且将数字证书传输给安全服务器 2) CA还负责为操作员、安全服务器以及注册机构服务器生成数字证书。安全服务器的数字证书和私钥也需要传输给安全服务器 CA服务器是整个结构中最为重要的部分,存有CA的私钥以及发行证书的脚本文件,出于安全的考虑,应将CA服务器与其他服务器隔离,任何通信采用人工干预的方式,确保认证中心的安全。 3. 注册机构RA 登记中心服务器面向登记中心操作员,在CA体系结构中起承上启下的作用 1) 一方面向CA转发安全服务器传输过来的证书申请请求 2) 另一方面向LDAP服务器和安全服务器转发CA颁发的数字证书和证书撤消列表。 4. LDAP服务器 LDAP服务器提供目录浏览服务,负责将注册机构服务器传输过来的用户信息以及数字证书加入到服务器上。这样其他用户通过访问LDAP服务器就能够得到其他用户的数字证书。 5. 数据库服务器:数据库服务器是认证机构中的核心部分,用于: 1) 认证机构中数据(如密钥和用户信息等) 2) 日志合统计信息的存储和管理 实际的的数据库系统应采用多种措施,如磁盘阵列、双机备份和多处理器等方式,以维护数据库系统的安全性、稳定性、可伸缩性和高性能。

我们知道,PKI的目的是使用公钥机制加密技术来保护通信的安全,而公钥算法涉及到很多的加密参数,同时PKI机制中还有对用户身份的识别的功能,为了满足这些需求,"证书"的出现就很自然了,证书从本质上来说就是一个ASCII文本文件,它只是将整个公钥机制中需要的各种数据都捆绑打包到了一起,统一管理、分发

 

2. SSL证书 

"SSL证书"这个词是一个相对较大的概念,有很多种格式的SSL证书,整个PKI体系中有很多格式标准。PKI的标准规定了PKI的设计、实施和运营,规定了PKI各种角色的"游戏规则"。如果两个PKI应用程序之间要想进行交互,只有相互理解对方的数据含义,交互才能正常进行,标准的作用就是提供了数据语法和语义的共同约定

1. X.509标准
PKI中最重要的标准,它定义了公钥证书的基本结构。
X.509是国际电信联盟-电信(ITU-T)部分标准和国际标准化组织(ISO)的证书格式标准。作为ITU-ISO目录服务系列标准的一部分,X.509是定义了公钥证书结构的基本标准。1988年首次发布,
1993年和1996年两次修订。当前使用的版本是X.509 V3,它加入了扩展字段支持,这极大地增进了证书的灵活性。X.509 V3证书包括一组按预定义顺序排列的强制字段,还有可选扩展字段
,即使在强制字段中,X.509证书也允许很大的灵活性,因为它为大多数字段提供了多种编码方案。X.509 V4版已经推出。 X.509标准在PKI中起到了举足轻重的作用,PKI由小变大,由原来网络封闭环境到分布式开放环境,X.509起了很大作用,可以说X.509标准是PKI的雏形。PKI是在X.509标准基础上发展起来的 1) SSL公钥证书 2) 证书废除列表CRL(Certificate revocation lists 证书黑名单) 2. PKCS标准(公钥加密标准 Public Key Cryptography Standards, PKCS) 它定义了"数据通信协议"的主要标准。这些标准定义了如何恰当地格式化私钥或者公钥,之所以需要定义PKCS标准,是因为证书的产生并不是在本地用的,往往需要在网络中进行传输,因此需要
有一个良好的规范来定义和保证证书在网络中的正常传输 http:
//zh.wikipedia.org/wiki/PKCS 1) PKCS#7 PKCS#7是由RSA安全体系在公钥加密系统中交换数字证书产生的一种加密标准,PKCS#7为"密码信封封装标准",描述了密码操作(例如数字签名和数字信封)的数据的通用语法。该语法允许
递归,例如一个数字信封可以嵌套在另一个数字信封里面,或者一个实体可以在一个已经封装的数据上签名。该语法同时允许添加任意属性,比如签名时间等。 该标准和保密增强邮件(PEM)是兼容的,如果以PEM兼容形式构建,那么被签名后的数据和签名后又封装的数据内容可以很容易地被转化成PEM格式。 这是一种将数据加密和签名(enveloping)的技术标准,它描述
1.1) 数字证书的语法 1.2) 其他加密消息 1.3) 数据加密 1.4) 数字签名的方法 1.5) 也包含了算法 常见的文件后缀有: 1.1) .P7B 1.2) .p7c 1.3) .SPC 文件中包含: 1) 证书 2) CRL列表信息 3) 没有私钥(注意) 2) PKCS#12 它定义了一个用于保存私钥和对应公钥证书的文件格式,并由对称密钥加密保护。PKCS#12通常采用PFX,P12作为文件扩展名。PKCS#12文件可以存放多个证书,并由密码保护,通常用于
WINDOWS IIS,也能够被当作Java Keysotre文件使用,用于Tomcat,Resign,Weblogic,Jboss等,不能被用于Apache. 常见的文件后缀有:
2.1) .PFX 2.2) .p12 文件中包含: 1) 证书(公钥) 2) 私钥(受密码保护(可选)) 3) 完整的证书链信息 3. X.500和目录服务标准 规定了证书撤销列表存储

0x1: SSL公钥证书

1. 证书版本号(Version)
版本号指明X.509证书的格式版本,现在的值可以为:
    1) 0: v1
    2) 1: v2
    3) 2: v3
也为将来的版本进行了预定义

2. 证书序列号(Serial Number)
序列号指定由CA分配给证书的唯一的"数字型标识符"。当证书被取消时,实际上是将此证书的序列号放入由CA签发的CRL中,这也是序列号唯一的原因。

3. 签名算法标识符(Signature Algorithm)
签名算法标识用来指定由CA签发证书时所使用的"签名算法"。算法标识符用来指定CA签发证书时所使用的:
    1) 公开密钥算法
    2) hash算法
example: sha1WithRSAEncryption
须向国际知名标准组织(如ISO)注册

4. 签发机构名(Issuer)
此域用来标识签发证书的CA的X.500 DN(DN-Distinguished Name)名字。包括:
    1) 国家(C)
    2) 省市(ST)
    3) 地区(L)
    4) 组织机构(O)
    5) 单位部门(OU)
    6) 通用名(CN)
    7) 邮箱地址

5. 有效期(Validity)
指定证书的有效期,包括:
    1) 证书开始生效的日期时间
    2) 证书失效的日期和时间
每次使用证书时,需要检查证书是否在有效期内。

6. 证书用户名(Subject)
指定证书持有者的X.500唯一名字。包括:
    1) 国家(C)
    2) 省市(ST)
    3) 地区(L)
    4) 组织机构(O)
    5) 单位部门(OU)
    6) 通用名(CN)
    7) 邮箱地址

7. 证书持有者公开密钥信息(subject PublicKey Info)
证书持有者公开密钥信息域包含两个重要信息:
    1) 证书持有者的公开密钥的值
    2) 公开密钥使用的算法标识符。此标识符包含公开密钥算法和hash算法。
8. 扩展项(extension)
X.509 V3证书是在v2的基础上一标准形式或普通形式增加了扩展项,以使证书能够附带额外信息。标准扩展是指由X.509 V3版本定义的对V2版本增加的具有广泛应用前景的扩展项,任何人都
可以向一些权威机构,如ISO,来注册一些其他扩展,如果这些扩展项应用广泛,也许以后会成为标准扩展项。
9. 签发者唯一标识符(Issuer Unique Identifier) 签发者唯一标识符在第2版加入证书定义中。此域用在当同一个X.500名字用于多个认证机构时,用一比特字符串来唯一标识签发者的X.500名字。可选。 10. 证书持有者唯一标识符(Subject Unique Identifier) 持有证书者唯一标识符在第2版的标准中加入X.509证书定义。此域用在当同一个X.500名字用于多个证书持有者时,用一比特字符串来唯一标识证书持有者的X.500名字。可选。 11. 签名算法(Signature Algorithm) 证书签发机构对证书上述内容的签名算法 example: sha1WithRSAEncryption 12. 签名值(Issuer's Signature) 证书签发机构对证书上述内容的签名值

example:

Certificate:
Data:
Version: 3 (0x2)
Serial Number:
    b7:90:fc:87:f2:27:ec:1e
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=ZH, ST=JS, L=WX, O=JN, OU=IOT, CN=LittleHann/emailAddress=306211321@qq.com
Validity
    Not Before: May  7 05:25:14 2014 GMT
    Not After : May  4 05:25:14 2024 GMT
Subject: C=ZH, ST=JS, L=WX, O=JN, OU=IOT, CN=LittleHann/emailAddress=306211321@qq.com
Subject Public Key Info:
    Public Key Algorithm: rsaEncryption
    RSA Public Key: (1024 bit)
    Modulus (1024 bit):
        00:c3:f2:9b:b8:20:3f:9e:c0:be:1d:18:a8:64:c0:
        47:79:71:bb:32:2e:63:43:af:da:01:bc:f3:f5:74:
        f8:29:4d:a8:ad:68:30:a4:bf:0a:42:71:8d:5f:58:
        c0:b1:97:a2:ae:e7:be:1e:6a:a7:d8:4a:14:f1:8f:
        67:f4:b3:64:45:88:a6:fa:ed:8f:9a:49:20:33:ca:
        dc:15:22:39:d9:40:02:1c:5f:4f:5b:1d:2c:ca:3d:
        30:8b:bc:07:0b:0f:58:03:6f:52:c7:0b:c4:54:59:
        cc:12:2a:4b:23:c6:98:fe:d3:80:a9:3f:d9:c0:1f:
        36:47:25:5a:72:fe:88:94:81
    Exponent: 65537 (0x10001)
X509v3 extensions:
    X509v3 Subject Key Identifier: 
    88:11:74:9F:7C:12:9C:92:FD:81:33:18:D0:2C:04:64:0F:00:1D:64
    X509v3 Authority Key Identifier: 
    keyid:88:11:74:9F:7C:12:9C:92:FD:81:33:18:D0:2C:04:64:0F:00:1D:64
    DirName:/C=ZH/ST=JS/L=WX/O=JN/OU=IOT/CN=LittleHann/emailAddress=306211321@qq.com
    serial:B7:90:FC:87:F2:27:EC:1E

    X509v3 Basic Constraints: 
    CA:TRUE
Signature Algorithm: sha1WithRSAEncryption
a1:6b:be:44:ba:2c:6f:88:c4:15:2d:27:0d:d7:60:0a:6a:c4:
6d:6f:1c:83:b4:0f:af:af:be:f9:f1:3e:9c:1b:d7:0a:e2:7b:
2b:70:96:d5:7e:90:51:1a:01:a3:36:7f:c3:2a:06:7a:f5:b1:
dd:c9:c5:fc:f1:98:f6:45:f6:40:ce:8a:93:4a:4e:1d:8f:9e:
2c:9f:8a:5c:d5:72:5a:0a:3e:f5:96:4b:2f:3d:ae:bf:55:50:
99:14:4a:63:34:43:41:5a:41:6e:b1:ec:7f:9d:4b:f6:d8:18:
ee:7a:10:5a:bc:d6:4b:5b:c4:0d:15:e3:23:cb:b2:63:03:62:
48:af

0x2: 证书废除列表CRL

证书废除列表CRL(Certificate revocation lists)为应用程序和其它系统提供了一种检验证书有效性的方式。任何一个证书废除以后,证书机构CA会通过发布CRL的方式来通知各个相关方

1. CRL的版本号
    1) 0: 表示X.509 V1 标准
    2) 1: 表示X.509 V2 标准
    3) 2: 表示X.509 V3标准
目前常用的是V3标准

2. 签名算法:包含:
    1) 算法标识
    2) 算法参数
用于指定证书签发机构用来对CRL内容进行签名的算法。

3. 证书签发机构名:签发机构的DN名,由
    1) 国家(C)
    2) 省市(ST)
    3) 地区(L)
    4) 组织机构(O)
    5) 单位部门(OU)
    6) 通用名(CN)
    7) 邮箱地址

4. 此次签发时间:此次CRL签发时间,遵循ITU-T X.509 V2标准的CA在2049年之前把这个域编码为UTCTime类型,在2050或2050年之后年之前把这个域编码为GeneralizedTime类型。

5. 下次签发时间:下次CRL签发时间,遵循ITU-T X.509 V2标准的CA在2049年之前把这个域编码为UTCTime类型,在2050或2050年之后年之前把这个域编码为GeneralizedTime类型。

6. 用户公钥信息,其中包括:
    1) 废除的证书序列号: 要废除的由同一个CA签发的证书的一个唯一标识号,同一机构签发的证书不会有相同的序列号
    2) 证书废除时间 

7. 签名算法:对CRL内容进行签名的签名算法。

8. 签名值:证书签发机构对CRL内容的签名值。

example:

Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=zh, ST=wx, L=js, O=jn, OU=iot, CN=littleHANN/emailAddress=306211321@qq.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (2048 bit)
                Modulus (2048 bit):
                    00:be:2c:a4:fc:9f:f7:b3:2a:6b:c8:2f:ec:8d:59:
                    ba:12:ed:8e:c1:82:e0:6b:5d:12:99:ff:a1:54:3f:
                    64:d5:31:7f:26:b6:70:95:a7:1e:7f:89:77:3b:c9:
                    cd:00:7c:9a:cc:32:c9:2f:56:f5:36:8d:2b:65:d9:
                    73:0c:a8:6f:03:46:1e:97:76:66:5c:93:a4:2c:00:
                    99:0e:b0:38:e5:43:22:ae:6e:c6:0c:f7:b5:ef:59:
                    9b:c8:d3:af:5a:35:9b:78:1d:e3:bd:c5:7e:08:9e:
                    fc:de:73:fd:2a:fc:f6:11:97:ca:60:30:f4:37:0f:
                    e7:d6:b7:36:d4:84:3e:e2:81:02:27:24:96:16:6d:
                    da:97:7c:d9:bf:5b:79:51:f1:ba:4e:e9:17:44:1e:
                    7c:fe:2d:b3:ec:62:34:2b:4d:ce:84:49:9f:0a:ec:
                    1e:fe:ee:69:60:e5:14:73:cd:8f:3d:75:d7:d9:c5:
                    b3:dc:c6:d7:d2:df:e6:ba:3a:a3:da:97:dd:24:cf:
                    6b:e4:00:df:64:13:22:da:25:e2:4b:47:d3:12:39:
                    60:0e:ab:a3:bc:54:c9:c3:36:80:9d:e5:f0:be:83:
                    d4:b5:d4:73:70:15:42:6e:74:04:06:ab:12:3e:02:
                    45:1f:02:20:79:fd:b5:00:48:b1:78:f0:a7:76:a5:
                    94:2f
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha1WithRSAEncryption
        82:1a:93:02:7d:42:02:91:7f:59:31:75:84:49:8a:d4:4a:90:
        ec:ad:c9:f7:3b:75:68:23:f4:d0:9b:de:ab:0e:4e:60:7c:46:
        be:26:35:38:68:6b:1e:d0:61:19:86:b2:b6:a6:94:5e:8a:c1:
        90:01:63:df:a7:c2:b0:79:75:bd:01:72:30:9a:08:21:83:82:
        51:e7:79:07:7b:c8:27:9d:fa:5d:38:89:3a:97:87:87:21:65:
        a7:00:3d:4b:c6:2f:ac:0c:45:57:8c:1a:bd:89:78:2b:7a:00:
        4d:48:09:c5:55:22:9e:92:6b:f9:c8:dd:8f:de:5c:61:c7:3d:
        20:6a:a3:6b:e5:32:00:2f:dd:68:d8:a5:66:be:19:fb:95:e1:
        e2:cc:18:1e:96:2e:e5:2f:58:d9:4c:f8:d5:92:1d:34:ed:79:
        52:a2:3d:02:2e:58:2f:86:d3:29:b7:5c:66:27:25:61:d3:0e:
        5e:86:77:12:0f:4f:12:3c:bf:95:85:5c:b7:77:05:11:9e:bb:
        06:ac:f8:cc:c3:42:84:f7:a7:84:b3:6c:fe:fe:66:92:31:32:
        dc:47:8d:a2:04:e0:2e:43:74:de:9f:03:c6:7e:f0:90:1d:0f:
        8a:f3:bc:5c:2c:5c:0b:db:d9:7d:69:05:31:a9:13:f4:18:1f:
        7d:69:f4:26

 

3. SSL证书生成、openSSL学习 

OpenSSL是一个强大的安全套接字层密码库,整个软件包大概可以分成三个主要的功能部分

1. 密码算法库
2. 常用的密钥和证书封装管理功能
3. SSL通信API接口
4. 丰富的应用程序供测试或其它目的使用

使用openSSL开发套件,我们可以完成以下功能

1. 建立 RSA、DH、DSA key 参数 
2. 建立 X.509 证书、证书签名请求(CSR)和CRLs(证书回收列表) 
3. 计算消息摘要 
4. 使用各种 Cipher加密/解密 
5. SSL/TLS 客户端以及服务器的测试 
6. 处理S/MIME 或者加密邮件 

openssl提供了很多不同的命令,每个子命令有很多的选项和参数,我们来逐一学习一下

1. openssl list-standard-commands(标准命令)
    1) asn1parse: asn1parse用于解释用ANS.1语法书写的语句(ASN一般用于定义语法的构成) 
    2) ca: ca用于CA的管理 
    openssl ca [options]:
        2.1) -selfsign
        使用对证书请求进行签名的密钥对来签发证书。即"自签名",这种情况发生在生成证书的客户端、签发证书的CA都是同一台机器(也是我们大多数实验中的情况),我们可以使用同一个
密钥对来进行"自签名" 2.2) -in file 需要进行处理的PEM格式的证书 2.3) -out file 处理结束后输出的证书文件 2.4) -cert file 用于签发的根CA证书 2.5) -days arg 指定签发的证书的有效时间 2.6) -keyfile arg CA的私钥证书文件 2.7) -keyform arg CA的根私钥证书文件格式: 2.7.1) PEM 2.7.2) ENGINE 2.8) -key arg CA的根私钥证书文件的解密密码(如果加密了的话) 2.9) -config file 配置文件 example1: 利用CA证书签署请求证书 openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key 3) req: X.509证书签发请求(CSR)管理 openssl req [options] <infile >outfile 3.1) -inform arg 输入文件格式 3.1.1) DER 3.1.2) PEM 3.2) -outform arg 输出文件格式 3.2.1) DER 3.2.2) PEM 3.3) -in arg 待处理文件 3.4) -out arg 待输出文件 3.5) -passin 用于签名待生成的请求证书的私钥文件的解密密码 3.6) -key file 用于签名待生成的请求证书的私钥文件 3.7) -keyform arg 3.7.1) DER 3.7.2) NET 3.7.3) PEM 3.8) -new 新的请求 3.9) -x509 输出一个X509格式的证书 3.10) -days X509证书的有效时间 3.11) -newkey rsa:bits 生成一个bits长度的RSA私钥文件,用于签发 3.12) -[digest] HASH算法 3.12.1) md5 3.12.2) sha1 3.12.3) md2 3.12.4) mdc2