openssl建立私有CA
一.常见的加密解密算法有
对称加密:加密和解密使用同一个密钥,其依赖于算法和密钥,算法是固定的,而密钥才是 保证文件的安全性的主体,特点是:加密、解密使用同一密钥;将明文分隔成固定大小的块,逐个进行加密;常见的有DES,AES,DES3等
非对称加密:主要是公钥加密,其特点是存在一个密钥对,即私钥和公钥。私钥仅允许个人使用,公钥是公开给所有人的。常用算法RSA,DSA,ELGamal
单向加密:提出数据的特征码,特点是无论原来的数据是多大级别,其加密结果长度一样;原始数据微小改变,将会导致结果巨大变化。常见的算法如md5
二.数字签名
数字签名是用于密钥交换的,即保证密钥交换双方接受到的密钥是可靠的。
一般来说,获取证书的办法主要有向RA注册申请以及构建私有CA,不过向RA注册申请不是免费的,需要付费。所以我们如果没有必有,可以用构建私有CA的办法。
构建私有CA,简单的说就是服务器端自己给自己颁发CA(证书)。当有客户端提出需要申请证书时,服务器端经过可靠途径把证书传递到客户端手里。当客户端获得该证书后就可以把它放到本地证书信任库里,当下次访问该服务端时,就可进行信任访问
构建私有CA主要有两个步骤:
1.服务端建立自己的CA证书
2.给各客户端分发证书
1.在服务端建立自己的CA:
建立私钥文件:
三点建议:
私钥文件的常用格式为.pem
一般,我们在openssl的工作目录下进行与之有关的目录,openssl的工作目录在/etc/pki/CA/
私钥文件只有该文件的建立者有只读权限,其他用户没有任何权限
建立私钥文件的命令:openssl genrsa
常用选项:-out /path/to/keyname.pem:将产生的私钥文件放在何处
进入CA工作目录,建立私钥文件
注意:第二个命令的最后有一个2048,指的是私钥长度为2048位,可用的有1024,2048等
生成自签证书
生成自签证书的命令格式为:
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days #
其中:
openssl req :生成签发证书命令
-new:生成新的证书签署请求
-key:私钥文件路径
-days:证书有效时长
-out :输出证书名称
-x509:直接输出自签署的证书文件,通常在构建CA时采用
输入以下命令后,会让你填入一些信息,比较注意的一项是common name,一般不填ip地址
同时要参考CA配置文件:/etc/pki/tls/openssl.cnf
需要有一个index.txt,所以我们必须创建一个名为index.txt的文件,以及一个名为serial的文件,并传入证书的初始序列号,放在CA工作目录下,否则后面步奏会报错。
注意以下工作是在另外一台主机上工作,作为客户端模拟申请证书的步骤,但是没有多余的机器只能在同一台主机上进行,建议以下步奏在另外一个虚拟机上进行。
2.给客户端发证书:
客户端申请证书
在证书申请的主机上进行如下步骤:
(1) 生成私钥;
生成私钥的步奏与在服务端一样
(2) 生成证书签署请求;
与 服务端的命令基本一致,这里注意一个问题,不能有-x509这个选项,因为这里是客户端在申请证书,不是服务器建立证书
注意:
(a) 其中的subject信息部分,要与CA的保持一致;
(b) Common Name要使用此主机在通信真实使用名字;
(3) 把请求发送给CA服务端
选用可靠途径,将httpd.csr文件传递给服务端
CA签发证书
(1) 验正请求者信息并签署证书
验证签署用户请求者信息通常用如下命令
openssl ca -in /path/to/file1 -out /path/to/file2 -days #
其中:
-in :客户端的申请证书,即上面由客户端发来的httpd.csr文件
-out :证书输出,即发给客户端的证书
(2) 把签署好的证书发还给请求者
把httpd.crt发给客户端