网络安全涉及的三个问题
1. 网络安全问题 - 数据机密性问题
传输的数据可能会被第三方随时都能看到
2. 网络安全问题 - 数据完整性问题
传输的数据不能随意让任何人进行修改
3. 网络安全问题 - 身份验证问题
第一次通讯时, 需要确认通讯双方的身份正确
网络安全涉及的问题说明:
1. 网络安全问题 - 数据机密性问题解决
a) 利用普通加密算法解决机密性
利用相应算法, 对传输数据 (明文数据) 进行加密(密文数据); 再利用对应算法, 将加密数据解密变为真实数据
优点: 实现了数据机密传输, 避免了明文传输数据的危险性.
缺点: 利用加密算法, 将明文改密文, 如果第三方获得加密算法, 即可将传输密文再次变为明文
b) 利用对称加密算法解决机密性(重要的一种加密方式)
对称加密算法就好比将普通算法的规则手册放入到了保险柜里, 只有获取保险柜和保险柜钥匙才能获取《算法
优点: 密钥加密算法计算速度非常快; 解决了普通加密算法的安全问题
缺点: 加解密过程的安全性完全依赖于密钥, 并且对称加密密钥是公开的, 当通讯加密对象过多时, 无法解决
2. 网络安全问题 - 数据完整性问题解决
a) 利用单项加密算法(全网备份数据完整性)
根据数据生成特征码(数据指纹信息); 接收数据方获取数据信息算出特征码, 验证是否与发送过来的特征码一
若特征码一致, 表示数据完整性没被破坏; 若特征码不一致, 表示数据已被破坏, 直接丢弃
扩展说明:
01: 不同数据的特征码 (数据指纹信息) 是不可能一致的
单项加密算法特征
. 数据输入一样, 特征码信息输出必然相同
. 雪崩效应, 输入的微小改变, 将造成输出的巨大改变
. 定长输出, 无论源数据多大, 但结果都是一样的
. 不可逆的, 无法根据数据指纹, 还原出原来的数据信息.
优点: 有效的解决了数据完整性问题
缺点: 没有考虑中间人对数据信息的影响
b)利用单项加密算法(加密特征码)
利用对称加密算法对数据加密的同时, 也对特征码进行加密;
接收方拥有和发送方一样的密钥, 才可以解密加密后的数据和特征码
而中间人加密的特征码是没有办法让接收方进行解密的, 所以接收方获取不了特征码, 直接丢弃数据
扩展说明:
01: 那么对称密钥如何有效的让通讯双方获取呢
需要进行对称密钥协商过程, 即通过密钥交换机制(Internet key exchange IKE)
实现密钥交换机制的协议称为 diffie-hellman 协议
3. 网络安全问题 - 身份验证问题解决
a)利用非对称密钥加密算法(公钥加密算法)
发送方建立私钥和公钥, 将公钥发送给接收方, 从而实现发送数据方的身份验证
公钥信息在网站访问过程中, 被称为证书(***)
网络安全问题结论: 实现网络安全性, 需要解决问题的顺序为
解决身份验证问题
解决数据完整性问题
解决数据机密性问题
网络安全证书由来:
根据上述结论可知, 网络安全性最首先要解决的就是身份验证问题;
而解决身份验证问题, 最主要的方式就是借助私钥和公钥
而最主要的公钥信息获取就变得尤为重要; 利用第三方公正者, 公正公钥信息
目前标准的证书存储格式是 x509, 还有其他的证书格式, 需要包含的内容为:
证书 ==***
? 公钥信息, 以及证书过期时间
? 证书的合法拥有人信息
? 证书该如何被使用(不用关注)
? CA 颁发机构信息
? CA 签名的校验码
OpenSSL 软件详细说明
获取 OpenSSL 软件的版本信息:
rpm -qa openssl
openssl version <- 查看 openssl 版本信息
获取 OpenSSL 配置文件信息:
/etc/pki/tls/openssl.cnf <- openssl 配置文件, 主要用于配置成私有 ca 时进行使用
说明: 基本上 openssl 配置文件不需要运维过多修改配置
利用 openssl 软件实现 HTTPS 访问过程
实现 HTTPS:
第一步: 创建出一个私钥文件(出生证明) --- 运维人员需要会
openssl genrsa 2048>server.key <- 创建私钥信息, 并指定私钥的长度为 2048, 并将生成的私钥信息保存在一个文件中
openssl genrsa -out server.key 2048 <- 将私钥信息直接进行保存, 加密长度一定要放在输出文件后面
(umask 077;openssl genrsa -out server1024.key 1024)
<- 利用小括号, 实现子 shell 功能, 临时修改 umask, 使之创建的私钥文件权限为 600
第二步: 生成证书文件信息
1. 生成自签发证书 --- 运维人员可以自行操作
[root@NFS-server-01 ~]# openssl req -new -x509 -key server.key -out server.crt -days 365
req <- 用于请求创建一个证书文件
new <- 表示创建的是新的证书
x509 <- 表示定义证书的格式为标准格式
key <- 表示调用的私钥文件信息
out <- 表示输出证书文件信息
days <- 表示证书的有效期
- You are about to be asked to enter information that will be incorporated
- into your certificate request.
- What you are about to enter is what is called a Distinguished Name or a DN.
- There are quite a few fields but you can leave some blank
- For some fields there will be a default value,
- If you enter '.', the field will be left blank.
- -----
Country Name (2 letter code) [XX]:CN <- 定义生成证书的国家
State or Province Name (full name) []:BJ <- 定义生成证书的省份
Locality Name (eg, city) [Default City]:BJ <- 定义生成证书的城市
Organization Name (eg, company) [Default Company Ltd]:oldboy <- 定义生成证书的组织
Organizational Unit Name (eg, section) []:it <- 定义生成证书的职能部门
Common Name (eg, your name or your server's hostname) []:oldboy.com.cn <- 定义主机服务器名称
说明: 此输出信息非常重要, 客户端在获取证书前, 会利用主机名与相应服务器之间建立连接, 然后获得证书
Email Address []:
2. 向证书颁发机构申请证书 --- ca 证书版本机构完成
生成请求证书文件 (户口本) --- 运维人员完成
openssl req -new -key httpd.key -out httpd.csr
获取得到证书文件 (***) --- ca 颁发机构完成
省略
第三步: 配置网站服务, 加载私钥和证书信息
- server {
- server_name YOUR_DOMAINNAME_HERE;
- listen 443;
- ssl on;
- ssl_certificate /usr/local/nginx/conf/server.crt;
- ssl_certificate_key /usr/local/nginx/conf/server.key;
- }
- server {
- listen 80;
- server_name www.etiantian.org;
- rewrite ^(.*)$ https://$host$1 permanent;
- }
- server {
- listen 443;
- server_name www.etiantian.org;
- ssl on;
- ssl_certificate /server/key/server.crt;
- ssl_certificate_key /server/key/server.key;
- root html/www;
- index index.HTML index.htm;
- }
第四步: 利用浏览器访问测试
ssl 模块官方链接:
来源: http://www.bubuko.com/infodetail-2971856.html