一、加密、解密技术简介
现在的加密/解密技术主要有三种:对称加密,非对称加密,和单向加密
这三种加密解密技术的组合就是现在电子商务的基础,它们三个有各自最适合的领域,而且所要完成的功能也是不同的,大家都知道,只要我们连上互联网,那么我们就相当于大门洞开,我们的一些隐私,跟其他人对话内容等都有可能会被人窃听,最常见的比如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
用法格式:
[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
示例:
给文件加密
[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
用法格式:
[root@gmq tmp]#openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1][-out filename] /path/to/somefile
[root@gmqtmp]# openssl dgst -sha1 /etc/fstab
MAC:消息摘要码(特征码),它是单向加密的一种实现或可以理解为是单向加密的延伸应用
应用:用于实现在网络通信中保证所传输的数据完整性,它的基本方式基于MAC就是将要通信的数据使用单向加密算法获取定长输出,而后将这个定长输出能够安全可靠的送达接收方的一种机制;当客户端发送数据到服务器端时,客户端会计算这段数据的特征码,并且将特征码发送个服务器端,从让而服务器端验证,但是这段特征码不能简单发过去,于是就基于MAC的这种算法,MAC会调用单向加密计算出结果并且将结果加密后发送给服务器端,保证特征码不会被别篡改。
实现机制:CBC-MAC(使用循环冗余校验码,将数据切成块传输的、不安全)
HMAC(使用md5和sha1算法来实现)实现消息认证
▲用户(身份)认证:
工具:passwd, openssl passwd
[root@gmqtmp]# openssl passwd -1
示例:
#→生成系统随机验证密码,其中的-1表示采用MD5算法,-salt加杂质; [root@gmq tmp]# openssl passwd -1 -salt 12345678加上-salt Password: #→输入密码123.com $1$12345678$07FWii2aK2wceVhjVGNtZ1 #→生成系统随机验证密码,注意-salt是我指定的内容 [root@gmq tmp]#openssl passwd -1 Password: #→输入密码123.com Verifying -Password: #→再次输入密码123.com $1$VhXp3JZq$NY.5RFGePKJmKUuv9M4t81 #→生成系统随机验证密码 [root@gmq tmp]# openssl passwd -1 –salt VhXp3JZq #→我将上次生成的随机码的杂质复制过来的 [root@gmq tmp]#openssl passwd -1 -salt VhXp3JZq Password: #→输入密码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.前面已经提到要想自签就需要生成密钥对儿(公钥,密钥 )
[root@CA CA]# openssl genrsa -out private/cakey.pem 2048 Generating RSA private key, 2048 bit long modulus ......................................+++ ..+++ e is 65537 (0x10001) [root@CA CA]# ls private/ -l total 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无效
公钥是从私钥中提取出来的,如果要想查看其公钥则
[root@CA 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 [root@CA CA]#
2.生成自签证书:
[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 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 []:caadmin@linux.com #→联系人邮箱 [root@CA 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 [root@CA CA]# touch index.txt serial crlnumber [root@CA CA]# echo 01 serial #→给该文一个初始的证书编号
3.CA Client 申请证书
如果证书是拿给你的客户端是web服务器使用的,那么就将证书私钥放到apache配置文件的目录中.
1)给CA Client创建一个目录生成保存这些文件
[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 -l total 4 -rw------- 1 root root 887 Mar9 18:44 httpd.key [root@CAClient ssl]#
2)生成证书签署请求(与CA服务器一样填写内容,一定要保持内容一致):
[root@CAClient 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 []:caadmin@linux.com #→联系人邮箱 Please enter the following ‘extra‘ attributes to be sent with your certificate request A challenge password []: #→输入密码对证书申请请求加密 [root@CAClient ssl]# ls httpd.csrhttpd.key [root@CAClient ssl]#
3)将申请发送个CA服务器(可以通过各种方式传送个CA服务器),我这里使用scp传送
[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)?yes Warning: 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传过来的证书申请文件
[root@CA CA]# cd /tmp/ [root@CA tmp]# ls httpd.csr #→已经过来了. [root@CA tmp]#
5)给CA Client的证书申请签证
[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.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 emailAddress=caadmin@linux.com 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 #→数据库更新 [root@CA tmp]# cd /etc/pki/CA/ [root@CA CA]# cat serial 02 #→证书序列号自动加1 [root@CA CA]#
5)将证书传送给CA Client(可以通过各种方式传送个CA服务器),我这里使用scp传送
[root@CA CA]# cd /tmp/ [root@CA 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. root@172.16.251.228‘s password: httpd.crt100% 39053.8KB/s00:00 [root@CA tmp]#
6) 我们到CA Client上查看是否有接收到从CA 服务器传过来的签好的证书文件
[root@CAClient 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 [root@CAClient ssl]#
此时只需要配置我们的web服务器使用证书就行了。
4.吊销证书:
假如说上面这个例子,签署的证书有效期是10年的时间,但是不到半年我们的服务器被别人攻破了,私钥被泄漏了,很有可能别人会冒充你在做出一些谋财害命的事情那将会很严重,此时我们就需要去CA颁发机构吊销、声明。如果证书过期也需要提出吊销、声明。
那如何吊销一个证书呢.
[root@CA tmp]# openssl ca -revoke httpd.crt #→我们对上面的CA Client做证书吊销操作 Using configuration from /etc/pki/tls/openssl.cnf Revoking 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
本文出自 “一叶知秋” 博客,请务必保留此出处http://maoqiu.blog.51cto.com/8570467/1377421