OpenSSL:构建CA的过程并实现web服务基于https访问的网络架构
本文环境 RedHat 5.8
本文主要内容:加密算法、CA介绍和配置等、web利用CA认证构建https安全传输
1、在互联网上数据额传输有两种:明文传输和加密传输。明文传输的协议有:ftp、http、smtp、telnet。但是为了数据的完整性和安全性,所以后来引用了加密等相关手段来保证数据的安全和完整性。
2、数据的机密性:
为了保证我们传输的数据不让第三方看到,所以我们采用加密来保证数据的机密性,让数据加密以后传输出去~然后让接收方利用相关的解密工具来对其收到的加密密文解密成明文,然后查看,这样就保证了数据的机密性。
常用的加密算法:
①、提取数据的特征码:利用数据的所有特性提取出一段特征码,然后利用这个特征码是否改变来保证数据的完整性,这种算法有以下几个特征:
输入一样,输出必须相同。
雪崩效应:输入的微小改变,将会引起结果的巨大改变
定长输出:无论原始数据是多大,结果大小都相同的。
加密过程不可逆,无法根据特征码还原原来的数据。
②、协商生成密码:密钥交换
密钥交换的算法:
AB:p-大素数,g-生成数
A:x 、B:y
A:g^x%p—>B
B:g^y%p-->A
A: (g^y%p)^x=g^yx%p
B: (g^x%p)^y=g^xy%p
这个结果就是密钥!
③、公钥解密算法:非对称的加密算法
密钥对:公钥publickey私钥scritekey,公钥是来自于私钥的
发送方用自己的私钥加密数据,可以实现身份验证
发送方用对方的公钥加密数据,可以保证数据的机密性
公钥加密算法很少利用加密数据,速度太慢,主要用于身份验证的。
④、对称加密算法:DES加密、3DES、AES高级加密标准、AES128(密码长度)、AES256、Blowfish。
单向加密:MD4、MD5(128)、SHA1(160)、SHA192、SHA384(输出长度)、CRC-32(循环冗余校验码)
⑤、公钥加密:身份认证(数字签名)、数据加密、密钥交换
公钥加密算法:RSA:既可以加密也可以签名、DSA:只能签名
对称加密的工具:openssl、gpg
3、PKI:Public Key Infrastructure
PKI定义了CA和其他的信息。
CA:证书颁发机构,Certificate Authority,既证书权威机构,是PKI的核心。CA中包含了证书吊销列表,数字证书有不同的格式,目前最流行的格式是X509的格式。
x509的证书格式包含:公钥及其有效期限、证书的合法拥有者、证书如何使用、CA的信息、使用CA签名的校验码
4、openssl:SSL的开源实现。
openssl软件组成:
libcrpto:通用加密库
libssl:TLS/SSl的实现,基于会话的,实现了身份认证、、数据机密性和会话完整性的TLS/SSL库
openssl:多用途命令行工具,可以实现私有证书颁发机构。
②、openssl常用的子命令
- openssl speed #:测试评估系统对加密算法的性能
- enc:加密算法
- salt:加salt加密
- openssl enc -des3 -salt -a -in inittab -out inittab.des3 :加密数据
- openssl enc -des3 -d -salt -a -in inittab.des3 -out inittab :解密数据
- openssl dgst -shal initta:计算数据的特征码
- openssl passwd –l 密码:输入密码即可显示加密后的密码
- openssl passwd -1 -salt 数据:加密的时候指定salt
- openssl rand -base64 100:生成随机数
③、openssl实现私有CA:先生成一对密钥,然后生成自签证书。
- 生成密钥:
- openssl genrsa -out /PATH/TO/KEYFILENAME NUMBITS
- NUMBITS:密钥长度,默认是128位的
- fg:(umask 077;openssl genrsa -out chris.key 1024) //生成后直接为700权限的key
- openssl rsa -in /PATH/TO/KEYFILENAME –pub out //读入密钥文件并输出公钥文件(提取公钥)
- 生成证书:
- openssl req -new -x509 -key chris.key -out chris.crt -days 365(-days:证书的有效期限),
- 然后输入相关的信息即可生成证书。
- 主机名称:至关重要,与主机名称保持一致,DNS主机名称,通信的唯一凭证。
- fg:openssl x509 -text -in chris.ca
5、CA配置文件:/etc/pki/tls/openssl.cnf
- [ CA_default ]
- dir = /etc/pki/CA //工作目录 ,此处需要指定,不然给客户到签证的时候必须
- 在特定的目录下才能实现。
- certs = $dir/certs //客户端证书目录
- crl_dir = $dir/crl //证书吊销列表
- database = $dir/index.txt //证书记录信息
- -------------------------
- new_certs_dir = $dir/newcerts //新生成证书的目录
- certificate = $dir/cacert.pem //CA自己的证书位置
- serial = $dir/serial //序列号
- crlnumber = $dir/crlnumbe //证书吊销列表序列号
- --------------------------
- crl = $dir/crl.pem //证书吊销列表文件
- private_key = $dir/private/cakey.pem //CA自己的私钥
- RANDFILE = $dir/private/.rand //随机数文件
- x509_extensions = usr_cert
- ------------------------------