数据加密:SSL: Secure Socket Layer安全的套接字层
Openssl:ssl在Linux上实现的一个软件,开源的
例:使用了ssl协议就不在是原来的协议了
http(80) --> ssl --> https (443)
NIST定义数据安全性的基本法则:
保密性:
数据保密性
隐私性
完整性:
数据完整性
系统完整性
可用性:
安全攻击:
被动攻击:监听
主动攻击:伪装、重放、消息篡改、拒绝服务
安全机制:
加密/解密、数字签名、访问控制、数据完整性、认证交换、流量填充、路由控制、公证
安全服务:
认证
访问控制
数据保密性
连接保密性
无连接保密性
选择域保密性
流量保密性
数据完整性
不可否认性
密码算法和协议:对称加密.公钥加密[非对称加密 ]单向加密/认证协议
常见算法:
DES:Data EncryptionStandard, 56bits
3DES:
AES:Advanced Encrpytion Standard, (128bits, 192, 256, 384, 512bits)
Blowfish
Twofish
IDEA
RC6
CAST5
特性:
1、加密、解密使用同一密钥;
2、将明文分隔成固定大小的块,逐个进行加密;
3、依赖于:算法和密钥;
安全性依赖于密钥,而非算法;
缺陷:
1、密钥过多;
2、密钥分发不便;
非对称加密:公钥加密
分为私钥和公钥,私钥仅给个人使用,公钥是给所有人公开获取的。常用算法:RSA、DSA(只能实现数据签名)
私钥:secret key,仅允许个人使用;
公钥:public key,公开给所有获取;
用处:
1.身份认证:私钥拥有者用自己的私钥加密的数据,只要用其公钥能解密,即可认证其身份;
2. 密钥交换:与被通信方通信之前,首先获取到对方的公钥,自己生成一个加密密码,用对方的公钥加密,并发送给对方;
3. 数据加密:但加密时间长,一般不用于数据加密
特性:
1、密钥长度较大,例如512bits, 2048bits,4096bits
2、加密解密分别使用密钥对儿中的密钥相对进行;
3、常用于数据签名和密钥交换;
单向加密:提出数据的特征码;
用于数据完整性校验
特性:
1、定长输出:无论原来的数据是多大级别,其加密结果长度一样;
2、雪崩效应:原始数据微小改变,将会导致结果巨大变化;
3、不可逆:
算法:
MD5:128bits定长输出;
SHA1:160bits定长输出;
SHA256
SHA384
SHA512:
接收方:
1、使用自己的私钥解密加密的临时密钥;从而获得对称密钥;
2、使用对称密钥解密对称加密的数据和私钥加密的特征码密文;从而获得数据和特征码密文;
3、使用发送方的公钥解密特征码密文,从而获得从计算生成的特征码;
4、使用与对方同样的单向加密算法计算数据的特征码,并与解密而来的进行比较;
数字证书:
CA:签证机构
功用:保证通信方公钥信息安全分发;
数字证书的格式(x.509 v3):
证书通常有两类用途:
用户证书
主机证书(httpd)
撤消证书:当私钥丢失时
PKI: Public KeyInfrastructure 公钥基础设施
签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库:
openssl的组成部分:
libcrypto:加密、解密库文件;
libssl: ssl协议实现
openssl:多用途命令行工具,每种功能都使用专用的子命令来实现
openssl:
子命令分类:
标准命令
消息摘要命令
加密、解密相关的命令
加密文件(对称加密):
工具:openssl enc, gpg
算法:des, 3des, aes, blowfish, twofish, idea, cast5
enc工具:
加密:
# openssl enc -e -加密算法 -a -salt -in 要加密的文件 -out 加密后输出的文件
例: -e -des3 表示指定加密方法为des3 -a表示要用ASCII格式输出你的内容 -salt 加杂质 -in 加密哪个文件 -out 加密后输出成哪个文件
解密:
# openssl enc -d -解密算法 -a -salt -in要解密的文件 -out 解密后输出的文件
例:opensslenc -d -des3 -a -salt -in fstab.drs3 -out fstab2
-d -des3 表示用什么算法解密 -a 表示要用ASCII格式输出你的内容 -salt 加杂质 -in 解密哪个文件 -out 解密后输出成哪个文件
单向加密:
# openssl dgst -加密算法 文件名
例:提取fstab文件的特征码,会输出到屏幕
生成用户密码:
# openssl passwd -1 -salt 8位随机数[做为杂质]
例:-1 指定MD5算法
生成随机数:
# openssl rand -hex[16进制]|-base64[文本格式] NUM
例:openssl rand -hex 4
随机数生成器:
任何随机数都是从这两个中取得
random,urandom
熵池:保存硬件中断产生的随机数
/dev/random:仅从熵池中返回随机数,当熵池中的随机数耗尽时,取随机数的进程将会被阻塞;
/dev/urandom:先从熵池中取随机数,当熵池中的随机耗尽时,就通过伪随机数生成器生成随机数;
生成密钥对儿:
操作过程:生成私钥,从私钥中提取公钥;
# openssl genrsa -out 生成的私钥文件 密钥长度[1024 20484096]
例:
注意:在bash命令行上放在小括号中执行的命令,其实是通过打开一个子shell进程进行的;
因为私钥应该仅属主可以查看,所以权限应为400或600
#(umask277; openssl genrsa -out 生成的私钥文件密钥长度[10242048 4096])
例:
从私钥中手动提取公钥:
# openssl rsa -in 生成的私钥文件 -pubout
X.509 v3数字证书的格式:
证书撤销链:
获取证书的方法:
向RA注册申请
建立私有CA:
OpenSSL
OpenCA
使用OpenSSL构建私有CA:
1、生成私钥:私钥用于签发证书时,向证书添加数字签名使用
2、生成自签署证书:每个通信方都导入此证书至“受信任的证书颁发机构”
配置文件:/etc/pki/tls/openssl.cnf
工作目录:/etc/pki/CA/
建立私有CA:
1、生成私钥文件:/etc/pki/CA/private/cakey.pem
#(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
2、生成自签证书
#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out/etc/pki/CA/cacert.pem -days #
-new: 生成新的证书签署请求;
-key:私钥文件路径,用于提取公钥;
-days N: 证书有效时长,单位为“天”;
-out:输出文件保存位置;
-x509:直接输出自签署的证书文件,通常只有构建CA时才这么用;
3、提供辅助文件
# touch /etc/pki/CA/index.txt [即索引文件]
#echo 01 > /etc/pki/CA/serial
给节点发证书:
1、节点申请证书
在证书申请的主机上进行如下步骤:
(1) 生成私钥;
# (umask 077; openssl genrsa -out 私钥位数[1024])
(2) 生成证书签署请求;openssl req -new key 私钥 -out 请求.csr
# openssl req -new -key httpd.key -out httpd.csr-days #
注意:
(a) 其中的subject信息部分,要与CA的保持一致;
(b) Common Name要使用此主机在通信真实使用名字;
(3) 把请求发送给CA;
2、CA签发证书
(1) 验正请求者信息
(2) 签署证书
# openssl ca -in 请求.csr -out 证书.crt -days N
(3) 把签署好的证书发还给请求者
吊销证书:
1、获取吊销证书的序列号;
# openssl x509 -in 证书.crt -noout-serial -subject
2、实现证书吊销
(0) 确保与index.txt中的序列号一致
(1) 吊销证书
# openssl ca -revoke 证书.crt
(2) 生成吊销证书的编号
echo 数字[原有吊销+1] >/etc/pkie/CA/crlnumber
echo 01 >/etc/pkie/CA/crlnumber
(3) 更新证书吊销列表
# openssl crl -gencrl -out 正在使用的吊销链文件.crl
本文出自 “吕航@博客” 博客,请务必保留此出处http://10116624.blog.51cto.com/10106624/1656889
原文地址:http://10116624.blog.51cto.com/10106624/1656889