您的位置:首页 > 运维架构

CA证书的申请、签发,数据的安全加密、openssl的使用

2012-03-08 13:56 375 查看
TCP/IP协议:
数据传输基本上明文的,不安全 这样的协议还有:
http、 smtp、 dns、 pop3、 imap4
常见的中间人攻击方式:窃听、数据注入、会话劫持
数据加密方式
1、对称加密
加秘方和解密方使用同一个密钥,加密快
密钥交换对于对称加密来讲是无法解决的一个难题
加密算法:
DES 数据加密标准 data encryption standard
3DES 使用des连续加密三次
AES:高级加密标准
Blowfish
加密常用工具
opwenssl enc
gpg(pgp)
2、公钥加密
密钥不是一个是一对,公开的叫公钥 另一段是私钥
data-->pk(公钥加密) --> code
code --sk(私钥解密) --> data
公钥加密非常慢,效率低,可以实现密钥交换
dh算法是实现密钥交换的重要机制

密钥交换的算法基于公钥加密 :
KE(DH)
公钥交换 Pub key encryption KE
公钥加密是非对称的加密
加密和签名 RSA,ELGamal
DSA只能实现签名
公钥加密工具:gpg、openssl rsautl
3、单向加密:获取数据特征码
特征:
1)定长输出
2)不可逆
3)雪崩效应 小小的变化,引起大的效应
身份验证:用户签名(数据签名)
证书CA 里存放了证书持有人的公钥,又称用户公钥;还有证书的有效期
加密的工具有:md5sum、sha1sum、openssl dgst
加密:就是将明文转换成密文
PKI Public key infrastructure 公钥基础设施
PKI核心就是CA
openssl 有三个组成部分
1、libcrypto
2、libssl 在linux实现ssl非常重要的库 能实现基于会话的安全
3、openssl 多用途的加密工具,还可以作为本地CA使用
# openssl speed 加密速度测试
# openssl rand [-base64] num 格式
# opsenssl rand 1223 生成二进制 不说明默认是二进制的
# opsenssl rand -base64 1223 生成64进
# echo -n redhat | openssl base64

可以计算文件的校验码
# md5sum test
# sh1sum test
如果文件有改动,加密结果会引起很大的不同

openssl实现单向加密
公钥在私钥中,公钥是从私钥中提取出来的
# openssl genrsa 2048 > my.key 2048位 生成私钥文件,用输出重定向保存到文件my.key
# openssl rsa -in my.key -pubout 公钥信息
生成私钥文件时直接改权限
# (umask 077;openssl genrsa 1024 > my.key)在子shell中运行且权限为600的权限

# openssl genrsa -des3 -out test.txt(文件名)1024 生成加密的私钥1024位的
# openssl rsa -in my.key -des3 -out mykey.hh 给没有加密的文件加密
# openssl rsa -in mykey.hh -out mykey 解密

证书里包含
1、证书的持有者的相关信息 包括主机IP
2、CA 的相关信息
3、证书的使用方法
4、公钥

x509格式
CA如何给自己发CA证如果这台主机是172.16.27.1?CA相关信息在/etc/pki目录下
1、# cd /etc/pki 切换到这个目录下看有哪些文件
2、# ls
3、# cd tls/
4、# vim
找到[CA_degault] 这一行将dir改为dir=/etc/pki/CA
5、# cd /etc/pki/CA
6、#(umask 077;openssl genrsa 1024 > private/cakey.pem) 生成的私钥就会保存在/etc/pki/CA/private下,
命名为cakey.pem 注:名字必须是cakey.pem开头,应为配置文件中指明要用这个名字 /etc/pki/CA/private 就是保存私钥的目录
7、# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days(有效期) 3650 -key:明确说明私钥文件在什么地方,证书里都是公钥,它能自动的提取私钥。
申请发证,自己申请自己签署,req:发出请求 -x509:ca格式 -new:新发起的 -days:有效期限
命令执行后会出现一个交互模式,1)、让你写国家两个字母代替:CN
2)、省份 3)、城市 4)、机构或公司名 5)、所在部门 6)、主机名:ca.(CA给自己颁发证书,所以这里用ca.什么什么,如ca.yy.com)
7)、email address:ca@yy.com
8、# ll 可以看到cacert.pem已经生成
9、# mkdir certs crl newcerts 创建CA的工作目录,为什么要使用这几个目录?取决于openssl的配置文件openssl.cnf
10、# touch index.txt serial 创建这两个文件 index.txt 缩影文件 serial 序列号
11、 # echo 01 > serial 给serial一个初始值
如果一台主机192.168.233.1需要一个CA证书如何用openssl生成CA证书
1、# hostname www.edu.com 比如说这个主机名是www.edu.com,可以根据自己的需要
2、# mkdir /etc/httpd 假设这台主机的web工作目录在/etc/httpd
3、# cd /etc/httpd
4、# mkdir ssl 创建一个子目录 专门存放与ssl相关的信息
5、# cd ssl/
6、#(umask 077;openssl genrsa 1024 > httpd.key)生成的私钥保存在当前目录下交httpd.key
7、# openssl req -new -key httpd.key -out httpd.csr 生成请求 .csr是正规后缀,也可以不叫这个名
执行命令后出现的结果和上面的差不多,主机名 为www.edu.co
8、# scp httpd.csr 172.16.27.1:/tmp 把请求发给CA 172.16.27.1

签署证书在172.16.27.1:
1、# cd /tmp
2、# ls 看一下有没有请求文件httpd.csr
3、# openssl ca -in httpd.csr -out httpd.crt 签证书
命令执行后会问你是否要签,写y,写y后又会问你是否确定再输入y
4、# ls 就会有签证文件httprd.csr
签证完后客户端就会获取到信息回到192.168.233.1主机:
# cd /etc/httpd/ssl
# scp 172.16.27.1:/tmp/httptd.crt ./
这就是CA发证的过程
怎样吊销证书?
# openssl ca -revoke httpd.crt 吊销http.crt证书
用户自己是没有吊销证书的权利的

那么怎样完整实现传输数据的安全呢?保证数据安全、完整传输的理论:
假如说是A给B发送数据,AB都有对方认可的CA证书,怎样实现呢?
首先A先生成一段数据即要发送的内容,然后用单向加密方法计算出特征码,为了保证A的身份,即是A发过来的,要用自己的私钥即发送方A的私钥加密特征码并附加在邮件的后面,同时为了保证这段数据只有B能看到其他人看不到,A再用对称加密生成一对对称密钥,用这个密码加密整段数据,最后A用B的公钥加密,公要信息都在CA证上面,CA证是公开的,这就是一段数据安全、完整性传输的过程。
上面是怎么判断数据的完整性呢?很简单,当B收到加密的数据后先用自己的私钥解密,然后B在用A的公钥解除A用私钥的加密,之后就能看到数据和特征码了,要想验证是否是完整,则只需要用同样的算法计算这段数据,看计算出来的特征码和发过来的特征码是否一样,一样说明数据完整,不一样说明数据变了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息