TCP/IP协议: <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

数据传输基本上明文的,不安全 这样的协议 有: 

http  smtp  dns pop3  imap4

常见的 中间人***方式:窃听 数据注入 会话劫持

数据加密方式

1、对称加密

 加秘方和解密方使用同一个密钥,加密快

 密钥交换对于对称加密来讲是无法解决的一个难题

加密算法:

 DES 数据加密标准 data encryption standard

 3DES 使用des连续加密三次

 AES:高级加密标准

 Blowfish

加密常用工具

 opwenssl enc

 gpgpgp

2、公钥加密

密钥不是一个是一对,公开的叫公钥 另一段是私钥

data-->pk(公钥加密) --> code

code --sk(私钥解密) --> data

公钥加密非常慢,效率低,可以实现密钥交换

dh算法是实现密钥交换的重要机制

密钥交换的算法基于公钥加密 

KEDH)

公钥交换 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 有三个组成部分

1libcrypto 

2libssl linux实现ssl非常重要的库 能实现基于会话的安全

3openssl 多用途的加密工具,还可以作为本地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 077openssl 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

2CA 的相关信息

3、证书的使用方法

4、公钥

x509格式

CA如何给自己发CA证如果这台主机是172.16.27.1CA相关信息在/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 077openssl 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:发出请求  -x509ca格式 -new:新发起的  -days:有效期限

命令执行后会出现一个交互模式,1)、让你写国家两个字母代替:CN 

      2)、省份  3)、城市 4)、机构或公司名 5)、所在部门 6)、主机名:ca.(CA给自己颁发证书,所以这里用ca.什么什么,如ca.yy.com

      7)、email addressca@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 077openssl 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证书

用户自己是没有吊销证书的权利的

那么怎样完整实现传输数据的安全呢?保证数据安全、完整传输的理论:

 假如说是AB发送数据,AB都有对方认可的CA证书,怎样实现呢?

首先A先生成一段数据即要发送的内容,然后用单向加密方法计算出特征码,为了保证A的身份,即是A发过来的,要用自己的私钥即发送方A的私钥加密特征码并附加在邮件的后面,同时为了保证这段数据只有B能看到其他人看不到,A再用对称加密生成一对对称密钥,用这个密码加密整段数据,最后AB的公钥加密,公要信息都在CA证上面,CA证是公开的,这就是一段数据安全、完整性传输的过程。

    上面是怎么判断数据的完整性呢?很简单,当B收到加密的数据后先用自己的私钥解密,然后B在用A的公钥解除A用私钥的加密,之后就能看到数据和特征码了,要想验证是否是完整,则只需要用同样的算法计算这段数据,看计算出来的特征码和发过来的特征码是否一样,一样说明数据完整,不一样说明数据变了。