一、加密、解密技术简介

       现在的加密/解密技术主要有三种:对称加密,非对称加密,和单向加密

      这三种加密解密技术的组合就是现在电子商务的基础,它们三个有各自最适合的领域,而且所要完成的功能也是不同的,大家都知道,只要我们连上互联网,那么我们就相当于大门洞开,我们的一些隐私,跟其他人对话内容等都有可能会被人窃听,最常见的比如man in the middle(中间人),它主要是因为双方身份无法验证的时候回话被劫持造成的,就是说通信双方都以为是在跟对方交流,其实内容都可能已经被这个“中间人”修改过,一些重要的信息也被这个“中间人”所获得,这对于现在的电子商务来说是致命的,所有我们必须找到一种解决方案来解决这个问题.


对称加密:指的是加密方和解密方使用的是同一个**

特性:加密/解密使用同一口令、将原文分割成固定大小的数据块,对这些数据块进行加密、

优点:加密效率高、计算量小、加密解密的速度很快

缺点:如果两个从未通信过的用户要进行通信的时候,该如何把解密的**传输给对方呢(**仍然要在网络上传输,所以**还是可能会被“中间人”截获),这是对称加密最大的缺点;

常见的对称加密算法有:

    DES:使用56位的**,2000年的时候被人**了,所以现在基本不再使用

    AES:高级加密标准,可以使用128,129,256三种长度**

其他的还有blowfish,Twofish,Serpent和RC6,IDEA(商业算法),CAST5等


非对称加密:非对称加密方式解决了对称加密的缺陷,它的加密和解***是不同的,比如对一组数字加密,我们可以用公钥对其加密,然后我们想要将其还原,就必须用私钥进行解密,公钥和私钥是配对使用的,常见的非对称加密算法有:

 RSA:既可以用来加密解密,又可以用来实现用户认证

 DSA:只能用来加密解密,所以使用范围没有RSA广

非对称加密长度通常有512,1024,2048,4096位,最常用的就是2048位,长度固然可增加安全但是需要花费很长时间来进行加密/解密,和对称加密相比,加密/解密的时间差不多是对称加密的1000倍,所以我们通常用其作为用户认证,用对称加密来实现数据的加密/解密


单项加密向加密就是用来计算一段数据的特征码的,为了防止用户通过“暴力**”的方式解密,所以单向加密一般具有“雪崩效应”就是说:只要被加密内容有一点点的不同,加密所得结果就会有很大的变化。单项加密还有一个特点就是无论被加密的内容多长/短,加密的结果(就是提取特征码)是定长的,用途:用于验证数据的完整性,常用的单项加密算法有:

MD5:这种加密算法固定长度为128位

SHA1:这种加密算法固定长度是160位

下图是帮助我们理解加密算法在Internet上的使用所作的说明:Linux系统基础-管理之加密、解密、Openssl基本应用及CA实现过程

解释如下,先说BOB和ALICE通信阶段

黑框A:表示要传输的数据
黑框B:就是单项加密对这段数据提取的特征码,这段特征码同时运用了非对称加密,具体过程是用BOB的私钥加密,传输给ALICE,只要到达后ALICE能解密,表明对方确实是BOB。这一过程同时起到了用户认证和数据完整性的校验。黑框B又称为数字签名
红框A:这一阶段会生成一段很长的随机数(**)然后配合对称加密算法对黑框A和黑框B加密,但是我们如何把加密的**传输给ALICE呢?这就要用到红框B了
红框B:这一阶段是用ALICE的公钥加密这串随机数(对称加密阶段的**),ALICE接受到数据后如果能用自己私钥解密,那就证明接受者确实ALICE


加密过程
第一步:用单向加密算法提取数据(黑框A)的特征值
第二步:用自己的私钥加密这段特征值形成黑框B
第三步:用对称加密算法,对黑框A和黑框B来加密,得到红框A
第四步:用ALICE的公钥来加密第三步所用的**,得到红框B


解密过程
第一步:ALICE用自己的私钥解密红框B得到对称加密的**
第二步:用这个**解密红框A内容第三步:用BOB的公钥解密黑框B,如果能成功,说明发送方确实是BOB,这就完成了身份验证(解密后会得到一串数据的特征值)
第四步:用同样的单项加密算法来对这段数据提取特征值,如果和第三步的特征值一样,说明这段数据是完整的,这就完成了数据完整性的校验


进行完上述内容发现一个问题就是BOB和ALICE如何获得对方的公钥,或者说如何证明得的公钥就是对方,这就需要引入另一方证书颁发机构CA,下面是对证书颁发机构跟BOB/ALICE之间的解释


黑框C:代表要颁发给BOB/ALICE的公钥,组织,地址等信息
黑框D:是对黑框C进行单向加密后得到的数字签名,然后用自己的私钥对其加密,传输给BOB和ALICE,拿着这个证书颁发机构的公钥(这些证书颁发机构的公钥一般已经被microsoft事先放在windows里面,当然其他操作系统也是一样的)的BOB和ALICE如果能对这个证书进行解密,说明这个证书颁发机构不是冒充的
红框E:表示颁发给BOB和ALICE的证书


二、openssl使用详解

上面我们说到了很多的算法,那真正将这些算法予以实现那就需要一些软件来负责这些相关操作,而真正能够完成这些操作的常用软件分别是gpg,openssl;
本文的重点是openssl的应用.

2.1、什么是OpenSSL呢?
OpenSSL是一个强大的安全套接字层密码库,Apache使用它加密HTTPS,O
penSSH使用它加密SSH,但是,你不应该只将其作为一个库来使用,它还是一个多用途的、跨平台的密码工具。作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的**和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。

2.2、OpenSSL的基本功能:
OpenSSL整个
软件包由三个套件组成:
   1).libcrypto:通用功能
密码算法
   2).libssl:SSL协议库,用于实现TLS/SSL的功能
   3).OpenSSL:多功能命令行工具(能够实现生成**、创建数字证书、手动加密解密数据)
OpenSSL的目录结构自然也是围绕这三个套件功能部分进行规划的。
openssl是多用途的加密组件,命令行工具,其可以实现对称加密算法、非对称加密算法、单向加密算法、作为一个简单的CA(OpenCA),其依赖的配置文件默认在/etc/pki/tls/openssl.cnf中,也可以自己定义;openssl作为简单的CA其颁发的证书格式有x509(比较通用,定义了证书的格式,类似于pkcs#10),pkcs#12和pkcs#17定义了如何将证书存诸的格式;openssl也可以实现证书格式的转换。


3.1、利用openssl工具加密、解密的基本使用方法以及算法:
加密解密技术常用的功能及算法:

▲对称加密:
算法:DES, 3DES, AES, Blowfish, Twofish, RC6, CAST5
工具:gpg, openssl enc
用法格式:

[[email protected] tmp]#openssl enc -des3 -a -salt -in /path/to/input_file -out /path/to/cipher_file
[[email protected] tmp]#openssl enc -d -des3 -a -salt -in /path/to/cipher_file -out/path/to/clear_file

示例:

给文件加密

[[email protected] tmp]#openssl enc -des3-salt -a -in /etc/inittab -out /tmp/inittab.sc → 回车输入密码
将上面的文件解密并保存在另一个文件中;
[[email protected] tmp]#openssl enc -d-des3 -salt -a -in /tmp/inittab.sc -out /tmp/inittab.cipher → 回车输入密码
#→enc表示加密解密,-d解密关键字
#→-des3表示3DES对称加密算法
#→-salt表示自己加入杂质
#→-a表示base64的输出
#→-in表示从哪个文件读入
#→-out表示把加密以后的文件保存到哪个文件中



▲单向加密:

特性:

One-Way

Collision-free

算法:

md5: 128bits

sha1: 160bits

sha512: 512bits

工具:sha1sum, md5sum, cksum, openssl dgst

用法格式:

[[email protected] tmp]#openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1][-out filename] /path/to/somefile


示例:

[[email protected]]# openssl dgst -sha1 /etc/fstab

MAC:消息摘要码(特征码),它是单向加密的一种实现或可以理解为是单向加密的延伸应用
       应用:用于实现在网络通信中保证所传输的数据完整性,它的基本方式基于MAC就是将要通信的数据使用单向加密算法获取定长输出,而后将这个定长输出能够安全可靠的送达接收方的一种机制;当客户端发送数据到服务器端时,客户端会计算这段数据的特征码,并且将特征码发送个服务器端,从让而服务器端验证,但是这段特征码不能简单发过去,于是就基于MAC的这种算法,MAC会调用单向加密计算出结果并且将结果加密后发送给服务器端,保证特征码不会被别篡改。

实现机制:CBC-MAC(使用循环冗余校验码,将数据切成块传输的、不安全)

HMAC(使用md5和sha1算法来实现)实现消息认证


用户(身份)认证:

工具:passwd, openssl passwd

[[email protected]]# openssl passwd -1

示例:

#→生成系统随机验证密码,其中的-1表示采用MD5算法,-salt加杂质;
[[email protected] tmp]# openssl passwd -1 -salt 12345678加上-salt
Password:   #→输入密码123.com
$1$12345678$07FWii2aK2wceVhjVGNtZ1   #→生成系统随机验证密码,注意-salt是我指定的内容
[[email protected] tmp]#openssl passwd -1
Password:   #→输入密码123.com
Verifying -Password:    #→再次输入密码123.com
$1$VhXp3JZq$NY.5RFGePKJmKUuv9M4t81   #→生成系统随机验证密码
[[email protected] tmp]# openssl passwd -1 –salt VhXp3JZq   #→我将上次生成的随机码的杂质复制过来的
[[email protected] tmp]#openssl passwd -1 -salt VhXp3JZq
Password:  #→输入密码123.com
$1$VhXp3JZq$NY.5RFGePKJmKUuv9M4t81    #→看到了吧这就是-slat的特点!
[[email protected]]#

公钥加密:公钥加密、私钥解密

**对儿:

公钥:pkey

私钥:skey

算法:RSA, EIGamal

工具:gpg, openssl rsautl

公钥加密不会用来实现数据加密,因为它的加密速度非常的慢,与对称加密相比它慢了3个数量级,所以公钥加密通常用来实现**交换和身份认证。

公钥加密的这种技术还可以用来实现**交换;

**交换:IKE

算法:DH(Diffie-Hellman)

公钥加密


数字签名(电子签名):私钥加密、公钥解密

它不会对原数据本身加密,而是对原数据的特征码

算法:RSA, EIGamal, DSA(只能用来做签名,而无法用来加密)

DSA: Digital Signature Algorithm

DSS: Digital Signature Standard


数字证书:

证书格式:x509、pkcs家族;私有CA

x509格式:

公钥和有效期限;

持有者的个人合法身份信息;主机证书(主机名)

证书的使用方式;

CA的信息;

CA的数字签名(让别人验证自身的身份)

那么谁来给CA发证呢?

还是由CA使用其私钥来对证书进行签名,这种我们称之为自签署证书。

如果我们为自己做一个私有CA的话,那我们就需要为自己签名;


证书申请请求:

1.自己生成一对**对儿

2.自己把所需信息和公钥按固定格式制作成证书申请

为别人颁发证书:

1.自签证书;

2.确认,签署证书

3.颁发

证书是有有效期的,如果过期那么需要吊销证书(不在继续使用的情况下)

一个证书颁发机构要发证书、吊销证书等,这些机制组合起来就叫做

PKI(Public Key Infrastucture公钥基础设施)


三、openssl实现私有CA

下面我们来介绍一下使用openssl这个软件实现私有CA的建立:

运用Opnessl实现私有CA

配置文件:/etc/pki/tls/openssl.cnf

假设在公司内部实现基于证书进行通信,那么我们需要自建一个私有CA.

下面我们来做一下如何自签一个证书;

准备工作:

准备两台主机:
CA服务器端和需要证书的客户端CA Client

1.前面已经提到要想自签就需要生成**对儿(公钥,** )

[[email protected] CA]# openssl genrsa -out private/cakey.pem 2048
Generating RSA private key, 2048 bit long modulus
......................................+++
..+++
e is 65537 (0x10001)
[[email protected] CA]# ls private/ -l
total 4
-rw-r--r-- 1 root root 1675 Mar  3 10:37 cakey.pem   #→它的权限此时谁都能读
[[email protected] CA]# rm –rf private/cakey.pem  #→先删除私钥文件我们换一种方式来做
[[email protected] CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
..............................+++
..............+++
e is 65537 (0x10001)
[[email protected] CA]# ls -l private/
total 4
-rw------- 1 root root 1675 Mar  3 10:42 cakey.pem
[[email protected] CA]#

我们将执行命令放在小括号里面执行,这种方式就是打开一个子shell在里面执行,在子shell中声明的环境变量对当前的shell无效,任何一个环境变量只对当前shell和子shell有效,对其父shell无效


公钥是从私钥中提取出来的,如果要想查看其公钥则

[[email protected] CA]# openssl rsa -in private/cakey.pem -pubout -text -noout
Private-Key: (2048 bit)
modulus:
    00:ad:82:1b:55:3c:66:69:cb:5c:ff:1f:a5:a2:18:
    39:a7:94:59:e7:5f:92:8b:84:e8:2b:e6:20:31:1c:
    2d:1c:be:5b:ea:62:ba:a6:ab:9e:cd:bb:93:9f:70:
    af:43:83:ee:ea:90:dd:58:5f:78:78:24:fb:f6:7e:
    eb:05:21:81:8e:53:24:00:c3:e2:bd:59:df:cf:e8:
    c8:69:df:31:38:a1:40:7c:a7:e2:b0:ba:dc:75:56:
    46:43:1a:3e:da:a7:25:5f:df:94:17:2f:dd:bd:dc:
    14:4b:0b:9b:a0:0e:a1:61:d8:be:84:d7:d0:82:98:
    91:87:4b:81:c1:bc:c7:6e:24:c4:a8:3a:75:46:3a:
    06:12:e7:1e:5a:e2:bb:3d:bf:ba:03:ff:7f:a6:f3:
    39:7f:f9:8d:99:36:b8:c2:e3:de:19:f7:40:0e:36:
    c2:f8:ed:9a:86:7f:f0:af:21:0f:c0:4f:50:82:6c:
    cd:35:d5:82:13:b6:32:32:53:ff:3d:b7:fe:39:3a:
    68:17:fa:ba:60:1a:19:94:7c:52:a5:49:62:32:3f:
    41:ff:45:71:87:d1:9e:19:01:6f:c7:51:82:67:c8:
    20:07:5b:e8:d0:ce:b0:7e:e3:72:77:94:60:df:6d:
    d3:4e:e6:f8:62:a1:6d:20:23:69:e4:b9:f0:e7:57:
    a9:93
publicExponent: 65537 (0x10001)
privateExponent:
    78:d3:6f:c1:4d:8c:6c:03:e8:40:e9:82:e8:7c:42:
    3a:06:bf:0c:b6:ab:50:69:3f:5c:c2:a6:8c:4c:78:
    c5:d9:72:1c:a8:a0:1e:4c:c9:0b:af:a2:3f:97:b3:
    15:2b:1d:07:4f:d6:34:22:57:bc:22:d5:2b:74:7a:
    a9:5a:09:e4:58:d5:6b:8a:fd:ac:aa:97:87:2b:2d:
    d5:3c:4e:04:87:96:66:b8:6a:ce:73:71:ee:6c:24:
    05:ba:93:26:a4:db:0c:06:a0:13:fd:8b:47:19:a9:
    30:11:67:50:70:9f:c5:89:b0:32:c6:2f:37:a2:93:
    45:4a:39:93:f6:a8:52:74:36:cd:1d:67:31:da:56:
    71:8d:d6:a3:37:0f:02:7f:3e:f6:ec:8e:3e:46:52:
    59:76:0f:9c:12:33:d2:0a:2b:39:7a:ad:7e:ba:32:
    c3:08:d4:0a:1b:9f:84:77:23:6f:a0:50:8a:d0:27:
    31:89:97:db:5c:f3:84:84:6d:bd:94:c7:b5:7c:f5:
    7a:6e:8d:11:fc:45:bc:d6:4d:9b:1e:61:33:ec:04:
    4e:14:2f:29:a4:f1:16:3a:30:39:9f:0e:d9:3d:67:
    a3:92:d0:47:e2:38:ac:4a:9f:b2:dc:07:15:ce:ae:
    87:16:09:3e:0d:95:33:0e:8c:43:dd:9c:fa:2b:8e:
    e1
prime1:
    00:d3:d9:f7:a2:80:68:82:08:6e:19:6e:c7:91:d6:
    e7:db:f5:2d:fe:62:3d:b3:e4:c7:02:07:5b:c8:e1:
    05:1f:bd:bb:93:8a:89:d1:19:da:7b:74:97:d0:54:
    2c:1a:ab:dd:75:6c:45:82:a1:4e:ce:14:89:8e:fe:
    bc:d2:0c:00:e7:79:47:cf:62:aa:75:30:28:be:a0:
    2e:f1:47:15:c1:66:df:76:c2:67:17:e3:d6:52:81:
    c6:fe:b6:10:05:3d:0d:19:d5:50:0b:7a:19:48:19:
    c5:cc:79:56:8c:2e:c3:e4:69:3e:9b:1c:59:09:ad:
    00:6a:40:78:bd:11:70:d9:bb
prime2:
    00:d1:aa:92:b8:a8:e3:51:77:af:76:6d:6a:2f:65:
    20:15:d8:fe:5f:90:0d:03:61:6b:31:98:48:db:d2:
    66:47:f5:ba:6a:e3:5f:7b:7e:e8:fd:32:04:40:fa:
    95:99:48:b3:f4:a0:0f:b2:c5:2a:88:93:30:8c:43:
    20:f6:a3:33:6b:31:0d:11:39:22:24:44:be:f9:3b:
    a7:31:e7:a1:8e:fd:16:b6:c0:78:fe:46:b8:45:41:
    be:e6:08:ec:a0:bd:64:38:53:93:99:c9:70:8e:2d:
    40:22:83:3a:d3:13:55:71:70:7f:55:ec:ff:e2:d5:
    b1:d1:14:e4:2e:ef:26:e6:09
exponent1:
    5f:36:f4:cc:8d:67:eb:21:7c:d2:63:6e:c0:c6:54:
    f9:10:0d:f6:ea:12:8f:5a:c0:72:d1:f9:d7:a4:02:
    d8:8c:3e:d5:06:0c:00:f5:dc:b3:65:e8:a1:92:63:
    2c:2d:98:60:21:24:70:9c:ad:3d:84:0f:7b:3c:54:
    83:17:30:04:d9:06:84:57:f5:02:ac:7d:73:87:ac:
    f1:76:20:7a:07:11:62:5f:e7:53:de:6b:c2:33:5f:
    cb:b4:ea:28:60:93:15:cc:40:a8:97:dc:eb:01:e2:
    5b:8f:21:6d:e9:ca:d3:4a:d5:ff:82:d3:25:bd:22:
    95:9e:9a:65:67:84:4f:e7
exponent2:
    7e:1f:4c:79:36:66:df:b7:ce:5d:bf:fd:b3:1a:f2:
    cd:11:a6:1a:d8:2d:6b:ce:2b:4c:3f:1d:fc:d5:b8:
    df:2a:ab:03:e7:58:a5:92:37:17:30:02:2d:10:4f:
    f3:50:2f:a8:44:ac:8c:ce:5c:02:a1:ff:ff:2f:d6:
    61:66:d4:e4:73:32:38:1d:15:33:9a:03:03:2b:e6:
    2c:77:f8:d0:69:e0:42:f8:cf:0f:ae:7c:e4:74:63:
    20:3f:58:10:6d:3d:1f:40:ef:36:00:5d:eb:b8:be:
    ae:c4:20:1b:9e:b2:b4:35:86:f3:aa:48:57:2c:52:
    f5:c1:ca:6d:8d:40:e9:f9
coefficient:
    00:80:81:da:e7:e7:65:45:39:e4:93:a1:ba:67:4a:
    64:70:0b:00:17:ed:e0:5c:06:95:9d:f4:b3:cd:9d:
    3e:e1:47:05:84:64:b0:b6:7a:b0:d0:6d:65:b6:c7:
    62:c1:ef:e3:07:4f:02:bf:57:76:a2:ff:ca:fd:4a:
    f2:d6:2c:9d:68:0c:b9:21:1d:62:0e:3f:5c:f5:09:
    28:9f:a8:ca:17:98:1a:97:38:f7:59:c3:bb:58:12:
    3b:b5:92:1e:35:ea:79:d5:71:0c:77:26:51:1c:cd:
    23:76:45:0d:a5:e5:a2:ba:a2:f5:3f:62:bd:35:e9:
    07:98:0b:e0:85:98:0b:84:46
[[email protected] CA]#

2.生成自签证书:

[[email protected] CA]#openssl req -new -x509 -key private/cakey.pem-out cacert.pem -days 3655 #→有效期限
#填写申请(个人信息):
You are about to be asked to enter information that willbe incorporated
into your certificate request.
What you are about to enter is what is called aDistinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN  #→国家2代码
State or Province Name (full name) []:BeiJing #→省份或州
Locality Name (eg, city) [Default City]:BeiJing #→城市
Organization Name (eg, company) [Default CompanyLtd]:Linux #→公司名称
Organizational Unit Name (eg, section) []:Linux Operation   #→部门名称
Common Name (eg, your name or your server's hostname)[]:ca.linux.com   #→如果是服务器发给主机的证书必须保持主机名要一致
Email Address []:[email protected]   #→联系人邮箱
[[email protected] CA]# ls -l
total 20
-rw-r--r--1 rootroot 1444 Mar3 11:05 cacert.pem  #→证书生成了
drwxr-xr-x. 2 root root 4096 Nov 22 20:20 certs
drwxr-xr-x. 2 root root 4096 Nov 22 20:20 crl
drwxr-xr-x. 2 root root 4096 Nov 22 20:20 newcerts
drwx------. 2 root root 4096 Mar3 10:42 private
[[email protected] CA]# touch index.txt serial crlnumber
[[email protected] CA]# echo 01 serial  #→给该文一个初始的证书编号


3.CA Client 申请证书

如果证书是拿给你的客户端是web服务器使用的,那么就将证书私钥放到apache配置文件的目录中.

1)给CA Client创建一个目录生成保存这些文件

[[email protected] ~]# cd /etc/httpd/
[[email protected] httpd]# mkdir ssl
[[email protected] httpd]# cd ssl/
[[email protected] ssl]# (umask 077;openssl genrsa -outhttpd.key 1024)
Generating RSA private key, 1024 bit long modulus
...................................++++++
......++++++
e is 65537 (0x10001)
[[email protected] ssl]# ls -l
total 4
-rw------- 1 root root 887 Mar9 18:44 httpd.key
[[email protected] ssl]#

2)生成证书签署请求(与CA服务器一样填写内容,一定要保持内容一致):

[[email protected] ssl]# openssl req -new -key httpd.key -outhttpd.csr
You are about to be asked to enter information that willbe incorporated
into your certificate request.
What you are about to enter is what is called aDistinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN  #→国家2代码
State or Province Name (full name) []:BeiJing #→省份或州
Locality Name (eg, city) [Default City]:BeiJing #→城市
Organization Name (eg, company) [Default CompanyLtd]:Linux #→公司名称
Organizational Unit Name (eg, section) []:Linux Operation #→部门名称
Common Name (eg, your name or your server's hostname)[]:ca.linux.com #→如果是服务器发给主机的证书必须保持主机名要一致
Email Address []:[email protected] #→联系人邮箱
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: #→输入密码对证书申请请求加密
[[email protected] ssl]# ls
httpd.csrhttpd.key
[[email protected] ssl]#

3)将申请发送个CA服务器(可以通过各种方式传送个CA服务器),我这里使用scp传送

[[email protected] ssl]# scp httpd.csr 172.16.251.74:/tmp/ #→将它放到CA服务器的/tmp目录下
The authenticity of host '172.16.251.74 (172.16.251.74)'can't be established.
RSA key fingerprint is07:84:0c:c5:04:f1:9c:5e:32:d0:b3:44:e8:9d:82:8d.
Are you sure you want to continue connecting (yes/no)?yes
Warning: Permanently added '172.16.251.74' (RSA) to thelist of known hosts.
[email protected]'s password: #→输入CA服务器管理员root的密码
httpd.csr100%7120.7KB/s00:00 #→传输成功
[[email protected] ssl]#

4)我们到CA服务器上查看是否接收到从CA Client传过来的证书申请文件

[[email protected] CA]# cd /tmp/
[[email protected] tmp]# ls
httpd.csr #→已经过来了.
[[email protected] tmp]#

5)给CA Client的证书申请签证

[[email protected] tmp]# openssl ca -in httpd.csr -out/tmp/httpd.crt -days 3655 #→这条命令CA服务器会找到/etc/pki/CA/cacert.pem文件结合证书申请文件来对CA Client 签证
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
SerialNumber: 1 (0x1)
Validity #→有效期限是10年
NotBefore: Mar3 04:12:33 2014 GMT
NotAfter : Mar5 04:12:33 2024 GMT
Subject: #→看到下面的信息没有,这就是在CA服务器和CA Client上填写的内容
countryName= CN
stateOrProvinceName=BeiJing
organizationName= Linux
organizationalUnitName= LinuxOperation
commonName=ca.linux.com
[email protected]
X509v3extensions: #→以下内容是证书签名的相关信息
X509v3Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3Subject Key Identifier:
98:BA:0B:D4:4F:0E:9F:2E:C6:90:46:6B:02:72:8E:D9:9B:51:F9:C3
X509v3Authority Key Identifier:
keyid:FC:25:F6:08:9E:EB:9B:B2:B4:2A:F4:2B:96:97:0A:13:C2:D5:A0:8F
Certificate is to be certified until Mar5 04:15:28 2024 GMT (3655 days
Sign the certificate? [y/n]:y #→与你确***认证的有效期将会到这个时间
1 out of 1 certificate requests certified, commit? [y/n]y  #→再次确认
Write out database with 1 new entries #→写进数据库一条条目
Data Base Updated #→数据库更新
[[email protected] tmp]# cd /etc/pki/CA/
[[email protected] CA]# cat serial
02  #→证书***自动加1
[[email protected] CA]#

5)将证书传送给CA Client(可以通过各种方式传送个CA服务器),我这里使用scp传送

[[email protected] CA]# cd /tmp/
[[email protected] tmp]# scp httpd.crt172.16.251.228:/etc/httpd/ssl
The authenticity of host '172.16.251.228(172.16.251.228)' can't be established.
RSA key fingerprint is84:ce:9f:d2:e3:ff:2b:1d:52:fd:c5:6f:ad:a2:4a:f3.
Are you sure you want to continue connecting (yes/no)?yes
Warning: Permanently added '172.16.251.228' (RSA) to thelist of known hosts.
[email protected]'s password:
httpd.crt100% 39053.8KB/s00:00
[[email protected] tmp]#

6) 我们到CA Client上查看是否有接收到从CA 服务器传过来的签好的证书文件

[[email protected] ssl]# ls -l
total 12
-rw-r--r-- 1 root root 3905 Mar9 20:02 httpd.crt #→CA签好的证书
-rw-r--r-- 1 root root712 Mar9 18:51 httpd.csr
-rw------- 1 root root887 Mar9 18:44 httpd.key
[[email protected] ssl]#

此时只需要配置我们的web服务器使用证书就行了。

4.吊销证书:

假如说上面这个例子,签署的证书有效期是10年的时间,但是不到半年我们的服务器被别人攻破了,私钥被泄漏了,很有可能别人会冒充你在做出一些谋财害命的事情那将会很严重,此时我们就需要去CA颁发机构吊销、声明。如果证书过期也需要提出吊销、声明。

那如何吊销一个证书呢.

[[email protected] tmp]# openssl ca -revoke httpd.crt  #→我们对上面的CA Client做证书吊销操作
Using configuration from /etc/pki/tls/openssl.cnf
Revoking Certificate 01.
Data Base Updated
[[email protected] tmp]# ls /etc/pki/CA/newcerts/
01.pem
[[email protected] tmp]#

至此该实验已结束.

注意,以上实验中签署文件以及CA 的**我没有按照正规的的存放位置来存放。

请各位看官注意这个问题.

=======================================================================================

四、基本常识

在讲述之前首先要知道openssl中有如下后缀名的文件

.key格式:私有的**

.crt格式:证书文件,certificate的缩写

.csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写

.crl格式:证书吊销列表,Certificate Revocation List的缩写

.pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式


常用证书协议

x509v3:IETF的证书标准

x.500:目录的标准

SCEP:  简单证书申请协议,用http来进行申请,数据有PKCS#7封装,数据其实格式也是PKCS#10的

PKCS#7:  是封装数据的标准,可以放置证书和一些请求信息

PKCS#10:  用于离线证书申请的证书申请的数据格式,注意数据包是使用PKCS#7封装这个数据

PKCS#12:  用于一个单一文件中交换公共和私有对象,就是公钥,私钥和证书,这些信息进行打包,加密放在存储目录中,CISCO放在NVRAM中,用户可以导出,以防证书服务器挂掉可以进行相应恢复思科是.p12,微软.pfx


Linux系统基础-管理之加密、解密、Openssl基本应用及CA实现过程以上总结若有误,请各位大神指点一二!