01:网络安全涉及的问题:
①. 网络安全问题-数据机密性问题
传输的数据可能会被第三方随时都能看到
②. 网络安全问题-数据完整性问题
传输的数据不能随意让任何人进行修改
③. 网络安全问题-身份验证问题
第一次通讯时,需要确认通讯双方的身份正确
02:网络安全涉及的问题解决:
①. 网络安全问题-数据机密性问题解决
a) 利用普通加密算法解决机密性
利用相应算法,对传输数据(明文数据)进行加密(密文数据);再利用对应算法,将加密数据解密变为 真实数据
优点:实现了数据机密传输,避免了明文传输数据的危险性。
缺点:利用加密算法,将明文改密文,如果第三方获得加密算法,即可将传输密文再次变为明文
b) 利用对称加密算法解决机密性(重要的一种加密方式)
对称加密算法就好比将普通算法的规则手册放入到了保险柜里,只有获取保险柜和保险柜钥匙才能获 取《算法手册》
优点:密钥加密算法计算速度非常快;解决了普通加密算法的安全问题
缺点:加解密过程的安全性完全依赖于密钥,并且对称加密密钥是公开的,当通讯加密对象过多时, 无法解决密钥管理问题。
②. 网络安全问题-数据完整性问题解决
a) 利用单项加密算法(全网备份数据完整性)
根据数据生成特征码(数据指纹信息);接收数据方获取数据信息算出特征码,验证是否与发送过来的 特征码一致
若特征码一致,表示数据完整性没被破坏;若特征码不一致,表示数据已被破坏,直接丢弃
****************************************************************************
扩展说明:
01:不同数据的特征码(数据指纹信息)是不可能一致的
单项加密算法特征
· 数据输入一样,特征码信息输出必然相同
· 雪崩效应,输入的微小改变,将造成输出的巨大改变
· 定长输出,无论源数据多大,但结果都是一样的
· 不可逆的,无法根据数据指纹,还原出原来的数据信息。
****************************************************************************
优点:有效的解决了数据完整性问题
缺点:没有考虑中间人攻击对数据信息的影响
b) 利用单项加密算法(加密特征码)
利用对称加密算法对数据加密的同时,也对特征码进行加密;
接收方拥有和发送方一样的密钥,才可以解密加密后的数据和特征码
而中间人加密的特征码是没有办法让接收方进行解密的,所以接收方获取不了特征码,直接丢弃数据
****************************************************************************
扩展说明:
01:那么对称密钥如何有效的让通讯双方获取呢
需要进行对称密钥协商过程,即通过密钥交换机制(Internet key exchange IKE)
实现密钥交换机制的协议称为diffie-hellman协议
****************************************************************************
③. 网络安全问题-身份验证问题解决
a)利用非对称密钥加密算法(公钥加密算法)
发送方建立私钥和公钥,将公钥发送给接收方,从而实现发送数据方的身份验证
问题:用户第一次访问百度时(还没有获取公钥),有可能会是钓鱼网站
例:让你的母亲验证你的爸爸身份信息,你的母亲就称为证书颁发机构
公钥信息在网站访问过程中,被称为证书(×××)
网络安全问题结论:实现网络安全性,需要解决问题的顺序为
1. 解决身份验证问题
2. 解决数据完整性问题
3. 解决数据机密性问题
1.2网络安全证书知识
03:网络安全证书由来:
根据上述结论可知,网络安全性最首先要解决的就是身份验证问题;
而解决身份验证问题,最主要的方式就是借助私钥和公钥
而最主要的公钥信息获取就变得尤为重要;利用第三方公正者,公正公钥信息
目前标准的证书存储格式是x509,还有其他的证书格式,需要包含的内容为:
证书==比喻为营业执照
?公钥信息,以及证书过期时间
?证书的合法拥有人信息
?证书该如何被使用(不用关注)
?CA颁发机构信息
?CA签名的校验码
1.3OpenSSL软件详细说明
获取OpenSSL软件的版本信息:
openssl version
获取OpenSSL配置文件信息:
/etc/pki/tls/openssl.cnf
说明:基本上openssl配置文件不需要运维过多修改配置
#举例说明,加密一个文件
# openssl enc -des3 -salt -a -in inittab -out initab.des3
# openssl enc -des3 -d -salt -a -in initab.des3 -out inittab
说明:其中命令中的salt参数,主要用于避免密码加密后,对密钥串的反推
#生成和用户一样的密码串
openssl passwd -1
说明:企业中实现修改数据库中用户密码信息,实现用户密码信息重置
#生成伪随机数方法
openssl rand -base64 45
md5sum 1.txt
1.4OpenSSL软件建立私有CA(证书颁发机构)
实现HTTPS:
1) 生成私钥(出生证明)和请求证书文件(户口本) --- 运维需要完成
2)根据请求证书文件信息,证书颁发机构生成证书文件(×××) --- 证书颁发机构来完成
3)企业网站利用证书,实现用户安全认证访问 --- 运维需要完成
模拟证书颁发机构颁发程序:
01)生成私钥文件信息方法:
openssl genrsa 2048 >server.key
openssl genrsa -out server.key 2048
(umask 077;openssl genrsa -out server1024.key 1024)
02) 生成自签署的证书
[root@NFS-server-01 ~]#openssl req -new -x509 -key server1024.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.
----- 以下默认参数可在/etc/pki/tls/openssl.cnf修改
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
说明:此输出信息非常重要,客户端在获取证书前,会利用主机名与相应服务器之间建立连接,然后获得证书
Email Address []:
#openssl x509 -text -in server.crt---用于查看证书中的信息
# CA自签发证书实际创建过程
cd /etc/pki/CA/private/
(umask 077;openssl genrsa -out ./cakey.pem 2048)
cd /etc/pki/CA
openssl req -new -x509 -key private/cakey.pem -out cacert.pem
说明:由于配置文件中定义了一些证书信息,所以默认输入即可
1.6利用证书实现HTTPS访问Nginx服务
1) 安装opessl软件
# yum install openssl
# yum install openssl-devel
2)进行证书目录规划
# cd /application/nginx/conf/
# mkdir key
# cd key/
3) 创建私钥文件
创建服务器私钥,命令会让你输入一个口令:这里输入的是oldboy
openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
......................++++++
...................++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
4)创建请求证书
创建签名请求的证书(CSR):
openssl req -new -key server.key -out server.csr
扩展说明:去掉私钥文件口令密码信息
5)配置Nginx服务使之支持证书访问
修改Nginx配置文件,让其包含新标记的证书和私钥:
server {
server_name YOUR_DOMAINNAME_HERE;
listen 443;
ssl on;
ssl_certificate /application/nginx/conf/key/server.crt;
ssl_certificate_key /application/nginx/conf/key/server.key;
}
6)nginx ssl 模块指令总结:
http://nginx.org/en/docs/http/ngx_http_ssl_module.html
1.7单台web服务器实现http访问自动跳转到https:
方法一:利用地址重写功能rewrite
说明:在https配置server基础上再添加http跳转server
[root@web01 keys]# cat /application/nginx/conf/extra/blog.conf
server {
listen 80;#默认用户访问的是http,80端口,让它跳转为https
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443;
ssl on;
ssl_certificate /server/keys/server.crt;
ssl_certificate_key /server/keys/server1024.key;
root html/blog;
index index.php index.html index.htm;
location ~ .*\.(php|php5)?$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
方法二:error_page 497 利用状态码跳转到https
说明:497为内置错误码,当访问http无法处理,需要利用https处理时
[root@web01 keys]# vim /application/nginx/conf/extra/blog.conf
server {
listen 443;
listen 80;
ssl on;
ssl_certificate /server/keys/server.crt;
ssl_certificate_key /server/keys/server1024.key;
root html/blog;
index index.php index.html index.htm;
location ~ .*\.(php|php5)?$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
error_page 497 https://$host$uri;
}
方法三:利用返回状态码实现跳转访问
说明:在https配置server基础上再添加http跳转server
server {
listen 80;
return 301 https://$host$uri;
}
1.8利用反向代理服务器实现访问https自动跳转为https
vim /applicaiton/nginx/conf/nginx.conf
第一个里程碑:修改地址池信息
upstream kai {
server 10.0.0.7:443;
server 10.0.0.8:443;
server 10.0.0.9:443;
}
第二个里程碑:修改地址池调用信息
server {
listen 443;
ssl on;
ssl_certificate /application/nginx/conf/key/server.crt;
ssl_certificate_key /application/nginx/conf/key/server.key;
location / {
proxy_pass https://kai;
}
}
第三个里程碑:定义http到https跳转配置信息
server {
listen 80;
rewrite ^(.*)$ https://$host$1 permanent;
}
领取专属 10元无门槛券
私享最新 技术干货