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

目录

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主要由以下组件组成

复制代码

) 技术的实现等

复制代码

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

复制代码

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

复制代码

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

openSSL命令、PKI、CA、SSL证书原理_第1张图片

典型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应用程序之间要想进行交互,只有相互理解对方的数据含义,交互才能正常进行,标准的作用就是提供了数据语法和语义的共同约定

复制代码

-电信(ITU-T)部分标准和国际标准化组织(ISO)的证书格式标准。作为ITU-ISO目录服务系列标准的一部分,X.509是定义了公钥证书结构的基本标准。1988年首次发布,
1993年和1996年两次修订。当前使用的版本是X. V3,它加入了扩展字段支持,这极大地增进了证书的灵活性。X. V3证书包括一组按预定义顺序排列的强制字段,还有可选扩展字段
,即使在强制字段中,X.509证书也允许很大的灵活性,因为它为大多数字段提供了多种编码方案。X.
    ) PKCS#) PKCS#

复制代码

0x1: SSL公钥证书

复制代码

) ) )  V3证书是在v2的基础上一标准形式或普通形式增加了扩展项,以使证书能够附带额外信息。标准扩展是指由X.. 签名值(Issuer证书签发机构对证书上述内容的签名值

复制代码

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/[email protected]
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/[email protected]
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/[email protected]
    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/[email protected]
        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提供了很多不同的命令,每个子命令有很多的选项和参数,我们来逐一学习一下

复制代码

. openssl list-standard-) -,这种情况发生在生成证书的客户端、签发证书的CA都是同一台机器(也是我们大多数实验中的情况),我们可以使用同一个
密钥对来进行
        ) -) -) -) -) -) -..) -) -- server.csr - server.crt -cert ca.crt -<infile >) -..) -..) -) -) -) -) -...) -) -) -) -) -.....) -) -- -x509 -days  -key server.key -- -key server.key --noout -text -.) -.) -.) -.) -.) -) -) -- server.key -passout pass: -des3  

    <infile >) -...) -...) -) -) -) -) -) -) -) -) -) -) -) -) -- server.key -passin pass: -- server.key -passin pass: -pubout -) -...) -...) -) -) -) -) -) -) -) -) -) -- cert.cer -inform DER -outform PEM --req -days  - server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -- server.crt -noout -) -..) -..) -) -) -) -) -) -) -) -) -) -- crl.crl -text -issuer -hash -- crl.pem -outform DER -<infile >-nocrl -certfile venus.pem -outform DER -

    
    https:

    <infile >
    https:
 . openssl list-message-digest-) -) -) -) -) -  key .) -.) -.) -.) ---dss1 -prverify dsakey.pem -) -) -) -) ---sign rsaprivate.pem -. openssl list-cipher-) aes--) aes--) aes--) aes--) aes--) aes--) bf-) bf-) bf-) bf-) cast-) cast5-) cast5-) cast5-) cast5-) des-) des-) des-) des-) des-ede-) des-ede-) des-ede-) des-) des-ede3-) des-ede3-) des-ede3-) des-) rc2--) rc2--) rc2-) rc2-) rc2-) rc2-) rc4-

复制代码

 

 

4. CA中心搭建、SSL证书生成过程

我们知道,用openSSL这个套件可以完成CA的搭建、SSL证书从生成到签发的全部过程,在使用openssl的指令的时候,我们需要记住几点:

复制代码

. 理解CA、SSL证书最重要的不是记住这些openssl指令,而是要理解CA的运行机制,同时理解openssl指令的功能,从原理上去理解整个流程,就不会觉得模糊了

复制代码

下面我们来一起学习一下怎么用openssl来完成一个CA的功能,并且签发一个apache可以使用的SSL证书

0x1: CA认证中心准备

我们首先要明白,要进行一个证书的签发工作,第一步要做的就是进行CA认证中心的准备工作,CA负责对请求证书(CSR)进行签名,有两种选择

1. 选择市场上公认的权威性的CA中心

复制代码

1. WebTrust
http://www.webtrust.net/2. GlobalSign
http://cn.globalsign.com/http://globalsign.tbs-certificats.com/3. GTE
http://certificate.fyicenter.com/335_Root_CA_GTE_CyberTrust_Global_Root_GTE_CyberTrust_Solutions.html4. Nortel
http://www.nortel.com/5. Verisign
http://www.verisign.com/

复制代码

选择权威的CA进行证书签发的好处就是目前大多数的浏览器都会预装内置了这些权威CA的公钥证书,这样,在使用这些权威CA签发过的证书的时候,浏览器一般不会报风险提示

相反,如果我们的证书的签发机构不是一个权威机构,浏览器在访问的时候就会报风险提示

2. 本机搭建CA认证中心

我们同样可以使用openssl在本机搭建CA认证中心

复制代码

/*1. 建立CA目录结构
按照OpenSSL的默认配置建立CA,需要在文件系统中建立相应的目录结构。相关的配置内容一般位于/usr/ssl/openssl.cnf内
-- demoCA/
    |-- index.txt
    |-- newcerts/
    |-- private/
    |-- serial
2. 生成CA证书的RSA密钥对
我们知道,要利用公钥机制,必要需要先建立密钥文件
3. 生成CA证书请求
4. 对CA证书请求进行自签名
(3、4两步可以合并执行)*/mkdir -p ./demoCA/{private,newcerts}
touch ./demoCA/index.txt
echo 01 > ./demoCA/serial
cp /usr/lib/ssl/openssl.cnf ./openssl genrsa -out ./demoCA/private/cakey.pem 2048openssl req -new -days 365 -key ./demoCA/private/cakey.pem -out careq.pem
..按照提示填写申请者身份信息..//openssl中有些指令可以为一条指令(3、4步骤可以合并到以下一步完成)openssl req -new -x509 -days 365 -key ./demoCA/private/cakey.pem -out ./demoCA/cacert.pem

复制代码

0x2: 服务端证书准备

要配置apache的SSL通信,需要为apache配置服务端的"服务器根证书"

复制代码

/*1. 生成服务端证书的RSA密钥对
和根CA一样,生成服务端证书同样也是使用RSA机制,自然也需要为服务端生成一个RSA私钥文件(但不能和CA的一样)
2. 生成服务端证书请求
4. 查看刚才生成的请求签发证书
3. 使用CA根书对"服务端请求签发证书文件"进行签名 
*/openssl genrsa -out serverkey.pem
openssl req -new -days 3650 -key serverkey.pem -out serverreq.pem
..填写证书申请者的身份信息..(common name不能为空,申请证书的countryName必须和CA的countryName相同)
openssl req -noout -text -in serverreq.pem
openssl ca -in serverreq.pem -out servercert.pem -config openssl.cnf
(如果在签发的时候遇到异常,记得到openssl.cnf配置文件中查看是否是配置项出了问题)

复制代码

0x3: 配置apache的SSL证书

复制代码

http:-s /etc/apache2/mods-available/ssl.load /etc/apache2/mods--s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-/usr/lib/apache2/modules//etc/apache2/-s /etc/apache2/sites-available/-ssl /etc/apache2/sites-enabled/-/etc/apache2/sites-enabled/-<Virtualhost>*: <VirtualHost *:>/etc/apache2/ssl///<Directory /></Directory> 
<Directory //www/>#  /apache2-/, but still have /^/$ /apache2-/ 
</Directory>
</VirtualHost> 
cd /etc/apache2/ssl/
openssl genrsa -out server.key 1024
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out servercert.pem 
/etc/init.d/apache2 restart

复制代码

0x4: 配置客户端的SSL证书

客户端证书并不一定需要,只有在服务端配置了一个"验证客户端选项"的时候,才需要配置客户端证书,在大多数情况下都不需要客户端证书

整个CA架构如下图所示

openSSL命令、PKI、CA、SSL证书原理_第2张图片

 

Copyright (c) 2014 LittleHann All rights reserved


你可能感兴趣的:(openSSL命令、PKI、CA、SSL证书原理)