Linux系统基础-管理之加密、解密、Openssl基本应用及CA实现过程

一、加密、解密技术简介

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

这三种加密解密技术的组合就是现在电子商务的基础,它们三个有各自最适合的领域,而且所要完成的功能也是不同的,大家都知道,只要我们连上互联网,那么我 们就相当于大门洞开,我们的一些隐私,跟其他人对话内容等都有可能会被人窃听,最常见的比如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上的使用所作的说明:

▲解释如下,先说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,OpenSSH使用它加密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用法格式:

12[root@gmq tmp]#openssl enc -des3 -a -salt -in /path/to/input_file -out /path/to/cipher_file[root@gmq tmp]#openssl enc -d -des3 -a -salt -in /path/to/cipher_file -out/path/to/clear_file

示例:

给文件加密

123456789[root@gmq tmp]#openssl enc -des3-salt -a -in /etc/inittab -out /tmp/inittab.sc → 回车输入密码将上面的文件解密并保存在另一个文件中;[root@gmq 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

用法格式:

1[root@gmq tmp]#openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1][-out filename] /path/to/somefile

示例:

1[root@gmqtmp]# openssl dgst -sha1 /etc/fstab

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

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

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

▲用户(身份)认证:

工具:passwd, openssl passwd

1[root@gmqtmp]# openssl passwd -1

示例:

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

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

密钥对儿:

公钥: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.前面已经提到要想自签就需要生成密钥对儿(公钥,密钥 )

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

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

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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192[root@CA CA]# openssl rsa -in private/cakey.pem -pubout -text -nooutPrivate-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:93publicExponent: 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:e1prime1: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:bbprime2: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:09exponent1: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:e7exponent2: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:f9coefficient: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[root@CA CA]#

2.生成自签证书:

12345678910111213141516171819202122232425[root@CA 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 incorporatedinto 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 blankFor 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 []:caadmin@linux.com #→联系人邮箱[root@CA CA]# ls -ltotal 20-rw-r--r--1 rootroot 1444 Mar3 11:05 cacert.pem #→证书生成了drwxr-xr-x. 2 root root 4096 Nov 22 20:20 certsdrwxr-xr-x. 2 root root 4096 Nov 22 20:20 crldrwxr-xr-x. 2 root root 4096 Nov 22 20:20 newcertsdrwx------. 2 root root 4096 Mar3 10:42 private[root@CA CA]# touch index.txt serial crlnumber[root@CA CA]# echo 01 serial? #→给该文一个初始的证书编号

3.CA Client 申请证书

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

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

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

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

123456789101112131415161718192021[root@CAClient ssl]# openssl req -new -key httpd.key -outhttpd.csrYou are about to be asked to enter information that willbe incorporatedinto 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 blankFor 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 []:caadmin@linux.com #→联系人邮箱Please enter the following 'extra' attributesto be sent with your certificate requestA challenge password []: #→输入密码对证书申请请求加密[root@CAClient ssl]# lshttpd.csrhttpd.key[root@CAClient ssl]#

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

12345678[root@CAClient 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)?yesWarning: Permanently added '172.16.251.74' (RSA) to thelist of known hosts.root@172.16.251.74's password: #→输入CA服务器管理员root的密码httpd.csr100%7120.7KB/s00:00 #→传输成功[root@CAClient ssl]#

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

1234[root@CA CA]# cd /tmp/[root@CA tmp]# lshttpd.csr #→已经过来了.[root@CA tmp]#

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

12345678910111213141516171819202122232425262728293031323334[root@CA 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.cnfCheck that the request matches the signatureSignature okCertificate Details:SerialNumber: 1 (0x1)Validity #→有效期限是10年NotBefore: Mar3 04:12:33 2014 GMTNotAfter : Mar5 04:12:33 2024 GMTSubject: #→看到下面的信息没有,这就是在CA服务器和CA Client上填写的内容countryName= CNstateOrProvinceName=BeiJingorganizationName= LinuxorganizationalUnitName= LinuxOperationcommonName=ca.linux.comemailAddress=caadmin@linux.comX509v3extensions: #→以下内容是证书签名的相关信息X509v3Basic Constraints:CA:FALSENetscape Comment:OpenSSL Generated CertificateX509v3Subject Key Identifier:98:BA:0B:D4:4F:0E:9F:2E:C6:90:46:6B:02:72:8E:D9:9B:51:F9:C3X509v3Authority Key Identifier:keyid:FC:25:F6:08:9E:EB:9B:B2:B4:2A:F4:2B:96:97:0A:13:C2:D5:A0:8FCertificate is to be certified until Mar5 04:15:28 2024 GMT (3655 daysSign 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 #→数据库更新[root@CA tmp]# cd /etc/pki/CA/[root@CA CA]# cat serial02 #→证书序列号自动加1[root@CA CA]#

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

123456789[root@CA CA]# cd /tmp/[root@CA tmp]# scp httpd.crt172.16.251.228:/etc/httpd/sslThe 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)?yesWarning: Permanently added '172.16.251.228' (RSA) to thelist of known hosts.root@172.16.251.228's password:httpd.crt100% 39053.8KB/s00:00[root@CA tmp]#

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

123456[root@CAClient ssl]# ls -ltotal 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[root@CAClient ssl]#

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

4.吊销证书:

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

那如何吊销一个证书呢.

1234567[root@CA tmp]# openssl ca -revoke httpd.crt? #→我们对上面的CA Client做证书吊销操作Using configuration from /etc/pki/tls/openssl.cnfRevoking Certificate 01.Data Base Updated[root@CA tmp]# ls /etc/pki/CA/newcerts/01.pem[root@CA 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实现过程

相关文章:

你感兴趣的文章:

标签云: