学习了OpenSSL在Linux中的使用,OpenSSL是一款开源的加密工具,在Linux环境下,我们能够利用它来搭建一个CA来实现证书的发放,可以用于企业内部使用的加密工具。在介绍OpenSSL之前,首先描述一下关于“身份认证+数据加密”的实现方法原理。
如何实现“身份验证+数据加密”,请看下面的一张流程图(自己画得,比较简陋)
整个加密过程:
发送方: 计算数据特征值----> 使用私钥加密特征值 ---> 随机生成密码对称加密整个数据 ---> 使用接受方公钥加密密码
接收方: 使用私钥解密密码 ----> 解密整个数据 ----> 使用公钥验证身份 ----> 比较数据特征值
但是存在一个问题,谁来管理公钥,任何在互联网上传播的数据都不安全,更不用说传递公钥,它如果被篡改,那就无法验证身份,所以不可能由用户自己颁发公钥。
这个时候需要有一个具有公信力的中间机构来做这份工作,那就是CA,由此引发了两个概念:
CA : 证书颁发机构
PKI : 公钥基础设施,公钥基础构架
证书: 里面存放了用户的各种信息,最核心的部分就是公钥
但是还有一个问题,谁来给CA颁发公钥,解决方法是,CA自己给自己颁发公钥。。。
下面是用OpenSSL这个强大的工具,在Linux下构建一个CA,来实现证书管理,我们用一个web服务器端作为需要证书的客户端
1.首先我们来给CA生成一个私钥
切换到/etc/pki/CA/目录,使用openssl命令给自己生成一个私钥
[root@ openssl]# cd /etc/pki/CA/ [root@ CA]# ls private [root@ CA]# (umak 66;openssl genrsa 2046 > private/cakey.pem) -bash: umak: command not found Generating RSA private key, 2046 bit long modulus .............................+++ ..+++ e is 65537 (0x10001)
2. CA需要一个自签证书,所以我们给它使用openssl命令生成一个自签证书
[root@ CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished 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) [GB]:CN # 输入你的各项信息,国家 , 省或州,地区,公司,单位,域名,邮箱地址 State or Province Name (full name) [Berkshire]:Henan Locality Name (eg, city) [Newbury]:Zhengzhou Organization Name (eg, company) [My Company Ltd]:LINUX Organizational Unit Name (eg, section) []:Tech Common Name (eg, your name or your server's hostname) []: #需要注意的是,这个域名是FQDN(完全限定域名) Email Address []:ca@rhce.com [root@ CA]# ls cacert.pem private
3.编辑CA配置文件,它位于etc/pki/tls/openssl.cnf,它的作用是指定你的CA所在目录,更改默认属性值