作者:mobiledu2502884677 | 来源:互联网 | 2017-11-04 00:42
学习了OpenSSL在Linux中的使用,OpenSSL是一款开源的加密工具,在Linux环境下,我们能够利用它来搭建一个CA来实现证书的发放,可以用于企业内部使用的加密工具。在介绍OpenSSL之前,首先描述一下关于“身份认证+数据加密”的实现方法原理。如何实现“身份验
学习了OpenSSL在Linux中的使用,OpenSSL是一款开源的加密工具,在Linux环境下,我们能够利用它来搭建一个CA来实现证书的发放,可以用于企业内部使用的加密工具。在介绍OpenSSL之前,首先描述一下关于“身份认证+数据加密”的实现方法原理。
如何实现“身份验证+数据加密”,请看下面的一张流程图(自己画得,比较简陋)
整个加密过程:
发送方: 计算数据特征值----> 使用私钥加密特征值 ---> 随机生成密码对称加密整个数据 ---> 使用接受方公钥加密密码
接收方: 使用私钥解密密码 ----> 解密整个数据 ----> 使用公钥验证身份 ----> 比较数据特征值
但是存在一个问题,谁来管理公钥,任何在互联网上传播的数据都不安全,更不用说传递公钥,它如果被篡改,那就无法验证身份,所以不可能由用户自己颁发公钥。
这个时候需要有一个具有公信力的中间机构来做这份工作,那就是CA,由此引发了两个概念:
CA : 证书颁发机构
PKI : 公钥基础设施,公钥基础构架
证书: 里面存放了用户的各种信息,最核心的部分就是公钥
但是还有一个问题,谁来给CA颁发公钥,解决方法是,CA自己给自己颁发公钥。。。
下面是用OpenSSL这个强大的工具,在Linux下构建一个CA,来实现证书管理,我们用一个web服务器端作为需要证书的客户端
1.首先我们来给CA生成一个私钥
切换到/etc/pki/CA/目录,使用openssl命令给自己生成一个私钥
- [root@www.linuxidc.com openssl]# cd /etc/pki/CA/
- [root@www.linuxidc.com CA]# ls
- private
- [root@www.linuxidc.com 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@www.linuxidc.com 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) []:www.rhce.com #需要注意的是,这个域名是FQDN(完全限定域名)
- Email Address []:ca@rhce.com
- [root@www.linuxidc.com CA]# ls
- cacert.pem private
3.编辑CA配置文件,它位于etc/pki/tls/openssl.cnf,它的作用是指定你的CA所在目录,更改默认属性值
- [root@www.linuxidc.com CA]# vim /etc/pki/tls/openssl.cnf
- [ CA_default ]
-
- dir = http://www.linuxidc.com/CA # Where everything is kept **************CA路径 ,修改为绝对路径
- certs = $dir/certs # Where the issued certs are kept ×××××××发给其他的人的证书 ,该目录需要手动创建
- crl_dir = $dir/crl # Where the issued crl are kept ××××××证书吊销列表 不属于必须创建的目录
- database = $dir/index.txt # database index file. *****************存放生成证书文件索引 需要手动创建的文件
- #unique_subject = no # Set to 'no' to allow creation of
- # several ctificates with same subject.
- new_certs_dir = $dir/newcerts # default place for new certs. ××××××××××x新生成的证书存放地 需要手动创建
- certificate = $dir/cacert.pem # The CA certificate
- serial = $dir/serial # The current serial number ××××××序列号,需要自己建每一个证书都有一个序列号需要自己建,并指定从几开始
- crlnumber = $dir/crlnumber # the current crl number
- # must be commented out to leave a V1 CRL
- crl = $dir/crl.pem # The current CRL
- private_key = $dir/private/cakey.pem# The private key
- RANDFILE = $dir/private/.rand # private random number file
- x509_extensions = usr_cert # The extentions to add to the cert
- # req_extensions = v3_req # The extensions to add to a certificate request
- #########修改证书CSR与自己的匹配
- [ req_distinguished_name ]
- countryName = Country Name (2 letter code)
- countryName_default = CN #我修改为CN和CA的自签证书对应
- countryName_min = 2
- countryName_max = 2
-
- stateOrProvinceName = State or Province Name (full name)
- stateOrProvinceName_default = Henan #同上
-
- localityName = Locality Name (eg, city)
- localityName_default = Zhengzhou #同上
-
- 0.organizationName = Organization Name (eg, company)
- 0.organizationName_default = Tech #同上
4.创建CA的相关目录和文件,指定序列号起始数字,在上一步已经说明,它们在CA所在目录创建
- [root@www.linuxidc.com ~]# cd /etc/pki/CA/
- [root@www.linuxidc.com CA]# mkdir certs crl newcerts
- [root@www.linuxidc.com CA]# ls
- cacert.pem certs crl newcerts private
- [root@www.linuxidc.com CA]# touch index.txt serial
- [root@www.linuxidc.com CA]# echo 01 > serial