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

我的学习笔记1:加密、解密,以及OpenSSL创建私有CA

2015-08-13 21:55 615 查看
1.OpenSSL—就是在SSL协议Linux主机上实现的一个软件,从而完成SSL的应用

2.NCIST 数据安全性法则:

(1)保密性。包括:数据保密性、隐私性

(2)完整性。包括:数据完整性、系统完整性

(3)可用性

3.加密算法

1.对称加密

特性:

(1)加密和解密使用同一个密钥。主要用于数据加密。

(2)将明文分割成固定大小的块,逐个进行加密。而非加密整个文件

依赖于:算法和密钥。安全性依赖于密钥,而非算法。
常见对称加密算法:
DES:Data Encryption Standard,使用56bits的密钥
3DES:就是对DES执行3轮
AES:Advanced Encryption Standard,采用(128bits,192bits,256bits)变化的密钥长度。(最常用的)
Blowfish
Twofish
IDEA
RC6
CAST5

缺陷:
1.密钥过多(当与更多的主机进行密钥通信时,针对不同的主机就会采用不同的密钥)
2.密钥分发

2.非对称加密,即公钥加密(其密钥是成对儿出现)
密钥对儿:私钥和公钥
私钥:仅允许个人使用,secret key
公钥:公开给所有人使用,public key。(公钥从私钥中提取而来,创建时只需创建私钥即可,另外使用公钥加密的数据,只能使用此公钥配对儿的私钥解密;反之亦然)

特性:
1.密钥长度较大,例如:512bits,2048bits
2.加密、解密分别使用密钥对儿中的密钥相对进行
3.常用于数字签名和密钥交换

用处:
1.身份认证:私钥拥有者用自己的私钥加密的数据,只要用其公钥能解密,即可认证其身份。
2.密钥交换:与被通信方通信之前,首先获取到对方的公钥,自己生成一个加密密码,用对方的公钥加密,并发送给对方。
不能用来加密数据的原因:
公钥加密算法长度太长,而数据一般很大,因此加密效率极低,仅用于加密密码
常用的公钥加密的算法:
RSA:密钥认证、数据交换都可应用(最常用)
DSA:仅用于密钥认证
ELGamal:

3.单项加密(指数据能加密但不能解密):主要用于提取数据的特征码
特性:
1.定长输出:无论原来的数据是多大级别,其加密结果长度一样
2.有雪崩效应:原始数据的微小改变将会导致结果的巨大变化
3.不可逆:

算法:
MD5:采用128bits的定长输出
SHA1:采用160bits的定长输出,一共有2^160种
SHA256
SHA384
SHA512

CRC32:循环冗余校验码

在/etc/shadow文件中就使用的单项加密算法:
![这里写图片描述](http://img.blog.csdn.net/20150813215409395)

用处:
1.数据完整性

数字签名:就是通信方用自己的私钥加密提取的特征码,就称为数字签名

密钥交换:

5.一次加密通信的全过程
发送者:
1.使用单项加密算法提取出数据的特征码
2.用自己的私钥加密特征码并附加在数据的后面
3.生成用于对称加密的临时密钥
4.用生成的临时密钥加密数据和已加密的特征码
5.使用接收方的公钥加密临时密钥,并附加在对称加密的后方
接收者:
1.使用自己的私钥解密临时密钥,从而获得对称密钥
2.使用对称密钥解密对称加密的数据和私钥加密的特征码密文
3.使用发送方的公钥解密特征码密文,从而获得对方计算生成的特征码和数据
4.使用与对方同样的单向加密算法计算数据的特征码,并与解密而来的进行比较

6.数字证书
CA:证书颁发机构,对通信双方的公钥进行签名、认证。
功用:保证公钥信息安全分发

数字证书的格式(x.509):
版本号(version)
序列号(serial number)
签名算法标志
发行者的名称:CA自己的名称
有效期:两个日志:起始日期和终止日期
证书主体名称:证书拥有者的名字
证书主体公钥信息:证书拥有者自己的公钥
发行商的唯一标识:
证书主体的唯一标识
扩展信息:
签名:CA对此证书的数字签名

证书通常有2类用途:
用户证书:某个用户单独使用
主机证书:(直接放在某主机上,被某个主机进程使用,如httpd进程)

撤销证书:

7.PKI:Public Key Infrastructure,公钥基础设施
组成部分:
签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库:

8.NetScape---网景公司,研发浏览器以及web浏览器,以及SSL也是其研发的。
SSL协议,现在的版本:sslv1,sslv2,sslv3
TLS协议:transport layer security,现在版本:tlsv1,

http基于ssl协议后就变成了https,https监听在443端口上

9.openssl的组成部分:
libcrypto:加密、解密库文件
libssl:ssl协议的实现
openssl:多用途的命令行工具,每种功能都使用专用的子命令来实现
linux中另一个加密解密的工具---gpg:全称GNU Privarcy Guard,是pgp规范的实现

10.openssl:
子命令分类:
标准命令
消息摘要命令
加密、解密相关的命令

1.加密文件(使用对称加密),
工具:openssl enc,gpg
算法:des,3des,aes,blowfish,twofish,idea,cast5

enc工具简单用法:
#openssl enc -e CIPHERNAME -a -salt -in /PATH/FROM/SOMEFILE -out /PATH/FROM/SOMECIPHERFILE

#openssl enc -d CIPHERNAME -a -salt -in /PATH/FROM/SOMECIPHERFILE -out /PATH/FROM/SOMEFILE

1.加密fstab文件
#openssl enc -e -des3 -a -salt -in fstab -out fstab.des3
-e :表示加密,encryption
-des3:表示使用的加密算法为des3
-a :表示使用ASCII格式输出文本内容
-salt:表示加密使用杂质
-in fstab:表示要加密的文件为fstab
-out fstab.des3:表示加密后的文件的名字叫fstab.des3
#cat fstab.des3
2.解密文件
#openssl enc -d -des3 -a -salt -in fstab.des3 -out fstab.new
-d:表示解密
#cat fstab.new

2.单向加密:(提取特征码)
算法:md5,sha1
工具:openssl dgst,md5sum

简单用法:
#openssl dgst -CIPHER /PATH/TO/SOMEFILE…..

1.产生fstab.new文件的特征码
#openssl dgst -md5 fstab.new
-md5:使用md5码来计算文件fstab.new特征码,并显示在屏幕上
#md5sum fstab.new

上述两者产生的md5码是一样的,

2.MAC:消息认证码,单向加密的一种延伸 应用,用于实现在网络通信中保证所传输的数据的完整性
常用的MAC机制:
CBC-MAC
HMAC:使用md5或sha1算法

3.生成用户密码:

简单用法:
#openssl passwd -1 -salt 8bits随机数
一般8bits随机数 随机生成
实例:
#openssl passwd -1 -salt 12345678
输入密码即可
-1:表示使用MD5码加密
-salt 12345678:表示加入杂质,防止密码一样而后生成的md5码一样

4.生成随机数
#openssl rand [-hex|-base64] NUM
1.#openssl rand -hex 4
4:表示4个字符,每个字符用2位二进制来表示
生成的随机数是0-9,a-f等16进制的随机数组成

2.#openssl rand -base64 4
生成的随机数a-z,1-9,A-Z等任何文本字符组成

5.整合生成随机数和用户密码
1.
#openssl passwd -1 -salt $(openssl rand -hex 4)

6.生成密钥对儿(即生成私钥,从私钥中提取出公钥)

简单用法1(生成密钥):genrsa
#openssl genrsa -out /PATH/TO/PRIVATE_KEYFILE NUMBITS
gensa:生成密钥的
-out /PATH/TO/PRIVATE_KEYFILE :指明生成密钥文件
NUMBITS:指明密钥长度

1.
#openssl genrsa -out test.key 2048
#cat test.key
#chmod 400 test.key
【生成私钥后,一定要更改私钥的权限,仅root用户可读,其他用户、组都无权限】

2.
#(umask 077;openssl genrsa -out /PATH/TO/PRIVATE_KEYFILE NUMBITS
)
#ll /PATH/TO/PRIVATE_KEYFILE

生成的test.key文件的权限自动就是600
注意:在bash命令行放在小括号执行的命令,其实是通过打开一个子shell进程进行的;

简单用法2(从私钥中提取公钥):rsa
#openssl rsa -in /PATH/TO/PRIVATE_KEY_FILE -pubout
1.从test.key提取公钥并输出在屏幕上
#openssl rsa -in test.key -pubout

系统上随机数生成器:random,urandom

熵池:用来保存硬件中断产生的随机数。被映射为两个设备文件:
/dev/random:仅从熵池中返回随机数,当熵池中的随机数耗尽时,取随机数的进程将会被阻塞
/dev/urandom:先从熵池中取随机数,当熵池中的随机数耗尽时,就通过伪随机数生成器生成随机数

X.509版证书格式:
![这里写图片描述](http://img.blog.csdn.net/20150813215310271)

获取证书的方法:
1.向RA注册申请
2.建立私有CA,主要工具:OpenSSL

使用OpenSSL构建私有CA:
1.生成私钥(私钥用于签发证书时,向证书添加数字签名使用)
2.生成自签署证书(证书用于实现与每个通信方都导入此证书至“受信任的证书颁发机构”)

配置文件:/etc/pki/tls/openssl.cnf
工作目录:/etc/pki/CA/

#cd /etc/pki/CA/;ls
certs crl newcerts private
certs:证书存放位置
crl:证书吊销列表存放位置
newcerts :新创建的证书存放位置
private:CA自己私钥的存放位置,cakey.pem为其私钥
生成CA的私钥,保存在private/下名为cakey.pem的文件,密钥长度为2048位
#(umask 077 ;openssl genrsa -out private/cakey.pem 2048)

生成自签证书的命令 :req,自请自签,
#openssl req -new -x509 -key private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
-new:表示生成的新的证书签署请求
-x509:表示自己跟自己签证,直接输出自签署的证书文件,通常只有构建CA的时候才用
-key private/cakey.pem :指明私钥的位置,用于提取公钥
-out /etc/pki/CA/cacert.pem :表示将生成的证书保存在/etc/pki/CA/cacert.pem文件里面
-days 3650:表示签署证书的有效期为10年,单位为“天”
然后继续签署即可,构建私有证书就完成了

给节点发证书
1.节点申请证书
(在证书申请的主机上进行如下步骤)
(1)生成私钥
(2)生成证书签署请求
(3)把请求发送给CA

【注意:】
(1)其中的subject信息部分,要与CA的保持一致
(2)Common Name要使用此主机在通信真实使用名字

2.CA签发证书
(1)验证请求者信息
(2)直接签署证书
#openssl  ca -in /PATH/FROM/CSR_FILE -out /PATH/TO/CRT_FILE -days N
(3)把签好的证书发还给请求者
3.提供辅助文件

示例:在web服务器下
#cd /etc/httpd/;ls
#mkdir ssl
#cd ssl/
生成私钥
#(umask 077 ;openssl genrsa -out httpd.key  1024)
生成证书签署请求
#openssl req -new -key httpd.key -out httpd.csr
签署请求即可

将证书请求发送给CA服务器端(若在同一台主机上就不用发了)

创建CA所需要的文件:index.txt,serial
#cd /etc/pki/CA;ls
#touch index.txt
#echo 01 > serial

签署请求
#openssl ca -in /etc/httpd/ssl/httpd.csr -out /etc/httpd/ssl/httpd.crt -days 3650

吊销证书
(1)获取吊销证书的序列号
#openssl x509 -in /PATH/FROM/CRT_FILE -noout -serial -subject
(2)CA实现证书吊销
1.吊销证书
#openssl ca -revoke /PATH/FROMCRT_FILE
2.生成吊销证书的编号
#echo 01 > /etc/pki/CA/crl/number
3.更新证书吊销列表
#openssl crl -gencrl -out THISCA.crl

示例:接上
#openssl x509 -in /etc/httpd/ssl/httpd.crt -noout -serial -subject

子命令:genrsa,req ,ca,x509,crl
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: