我的学习笔记1:加密、解密,以及OpenSSL创建私有CA
2015-08-13 21:55
615 查看
1.OpenSSL—就是在SSL协议Linux主机上实现的一个软件,从而完成SSL的应用
2.NCIST 数据安全性法则:
(1)保密性。包括:数据保密性、隐私性
(2)完整性。包括:数据完整性、系统完整性
(3)可用性
3.加密算法
1.对称加密
特性:
(1)加密和解密使用同一个密钥。主要用于数据加密。
(2)将明文分割成固定大小的块,逐个进行加密。而非加密整个文件
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
相关文章推荐
- Linux权限数字解析
- linux yum命令详解
- Linux-2.6.32 NUMA架构之内存和调度
- 如何在Linux操作系统之上的MySQL数据库操作环境中使用清屏命令?
- Linux C编程的DEBUG宏
- oop_day05_package、public、static、final、内部类
- 终端、控制台、shell的关系
- linux中fork()函数详解
- -Dmaven.multiModuleProjectDirectory system propery is not set.
- OpenGL ES 光照
- UVA11261 Bishops
- Linux socket编程的心跳机制总结
- Centos java 安装
- 关于记号粘贴操作符(token paste operator): `##`
- linux系统优化参数
- summary of mirantis openstack integrating with vsphere
- 菜鸟第四天:Linux文件管理命令详解
- linux驱动开发中断例程学习
- linux内核链表的使用
- linux设备驱动开发学习--内存和IO访问