标签:网络安全
HTTPS数据机密性问题 ---数据可能会被第三方看到
数据完整性问题 ---传输的数据不能随意让任何人进行修改
身份验证问题 ---第一次进行通讯时,需要确认通讯双方的身份确认
a. 利用普通加密算法解决机密性问题
利用相应算法,对传输数据进行加密,再利用这个算法解密成真实数据
优点:实现了数据机密传输,避免了明文传输数据的危险性
缺点:利用机密算法,将明文改成密文,如果第三方获得加密算法,即可将传输密文再次变为明文
b. 利用对称加密算法解决机密性(重要的一种加密方式)
对称加密算法就好比将普通算法的规则手册放入到保险柜里,只有获取保险柜和保险柜钥匙才能获取算法手册
优点:密钥加密算法计算速度非常快,解决普通加密算法的安全问题
缺点:加解密过程的安全性完全依赖于密钥,并且对称加密密钥时公开的,当通讯对象过多时,无法解决密钥管理问题
根据数据生成特征码(数据指纹信息),接受数据防获取数据信息算出特征码,验证是否与发送过来的特征码相同
若特征码一致,表示数据完整性没有被破坏,若特征码不一致,表示数据被破坏,直接丢弃
扩展说明:
不同数据的特征码(数据指纹信息)是不可能一致的
优点:有效的解决了数据完整性的问题
缺点:没有考虑中间人攻击对数据信息的影响
a. 利用单项加密算法(加密特征码)
利用对称加密算法对数据加密的同时,也对特征码进行加密接收方拥有和发送方一样的密钥,才可以解密加密后的数据和特征码,而中间人的加密的特征码是没有办法让接收方进行解密的,所以接收方获取不了特征码,直,接丢弃数据
扩展说明:
对称密钥如何有效的让通讯双方获取呢?
需要实现密钥协商过程,即通过密钥交换机制,实现密钥交换机制的协议称为diffie-hellman协议
a. 利用非对称密钥加密算法(公钥加密算法)
发送方建立私钥和公钥,将公钥发送给接受方,从而实现发送数据方的身份验证
1. 身份验证问题
2. 数据完整性问题
3. 数据机密性问题
根据上述结论可知,网络安全性最首先要解决的就是身份验证问题,而解决身份验证问题,最主要的方式就是借助私钥和公钥,而最主要的公钥信息获取就变得非常重要,利用第三方公正者,公正公钥信息
目前,标准的证书存储格式是x509,还有其他的证书格式等,
证书需要包含的内容为: 证书—×××
公钥信息,以及证书过期时间
证书该如何被使用 不用关注
ca颁发机构信息
ca签名的校验码
用途:openssl就是一个模拟ca的行为的工具,有了它你就是一个ca,可以签发请求证书文件,以及生成crl列表
[root@web01 ~]# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
[root@web01 ~]# cat /etc/pki/tls/openssl.cnf 此配置文件350多行,主要用与配置成私有ca时使用
[root@web01 tmp]# cat jiang.txt
nihaojintian
[root@web01 tmp]# openssl enc -des3 -salt -a -in jiang.txt -out ceshi
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
[root@web01 tmp]# ll
total 8
-rw-r--r-- 1 root root 45 Mar 2 14:42 ceshi
-rw-r--r-- 1 root root 14 Mar 2 14:41 jiang.txt
[root@web01 tmp]# openssl enc -des3 -salt -a -in ceshi -out jiang.txt
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
[root@web01 tmp]# cat jiang.txt
U2FsdGVkX1+37dvGJAqspOZLFKPkK1TCnaJjC7VRCooj8d27d4pZIH5ySlM1xLi1
N2Z+QwCHMP/3kquYrO/3Aw==
salt参数,主要用于避免密码加密后,对密码串的反推
openssl passwd -1
[root@web01 tmp]# openssl rand -base64 22
atl7XjeNmYKhmmjezbNQm1aLFSbE0g==
openssl软件建立私有ca(证书颁发机构)
1. 生成私钥(相当于出生证明)和请求证书文件(户口本)
2. 根据请求的证书文件信息,证书机构生成证书文件(×××)
3. 企业网站利用证书,实现用户安全认证访问
[root@web01 server]# mkdir key
[root@web01 key]# openssl genrsa 128 >server.key ---128表示指定生成私钥的长度
[root@web01 key]# openssl genrsa -out server.key 128
[root@web01 key]# (umask 077;openssl genrsa -out server1024.key 1024) ---利用小括号实现子shell功能
[root@web01 key]# openssl passwd 2344555
3DavZjsuEfQ1A
说明:在企业中,用户可能会忘记自己的密码,这时需要工作人员帮助其进行重置密码,可利用openssl命令生成加密信息,复制到数据库中,将密码告知用户,并当用户登录后及时修改密码
[root@web01 key]# openssl req -new -x509 -key server1024.key -out server.crt -days 365
req ---用与创建新的证书
new ---表示创建的是新的证书
x509 ---表示定义证书的格式为标准格式
key ---表示调用的私钥文件信息
out ---表示输出证书文件信息
days ---表示证书的有效期
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 <- 定义主机服务器名称
[root@web01 key]# openssl x509 -text -in server.crt 查看证书中的信息
[root@web01 key]# cd /etc/pki/CA/private/ 进入到私钥保存目录
[root@web01 private]# (umask 077;openssl genrsa -out ./cakey.pem 2048) 创建一个ca私钥文件
[root@web01 private]# cd /etc/pki/CA/ 进入到ca自签发保存目录
[root@web01 CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem 生成自签发证书
# yum install openssl
# yum install openssl-devel
[root@web01 CA]# cd /application/nginx/conf
[root@web01 conf]# mkdir key
创建服务器私钥,命令会让你输入一个口令:这里是jiang
[root@web01 conf]# 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:jiang
Verifying - Enter pass phrase for server.key:jiang
创建签名请求的证书(CSR):
[root@web01 key]# openssl req -new -key server.key -out server.csr
扩展说明:去掉私钥文件口令密码信息
[root@web01 key]# cp server.key server.key.org
[root@web01 key]# openssl rsa -in server.key.org -out server.key
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;
}
[root@web01 conf]# vim nginx.conf
server {
listen 443;
listen 80;
ssl on;
ssl_certificate /server/key/server.crt;
ssl_certificate_key /server/key/server1024.key;
server_name blog.etiantian.org;
location / {
root html/blog;
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
error_page 497 https://$host$uri;
location = /50x.html {
root html;
}
location ~* .*\.(php|php5)?$ {
root html/blog;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
server {
listen 80;
server_name blog.etiantian.org;
rewrite ^(.*)$ https://$host$1 permanent;
} 在http模块中假如即可
server {
listen 80;
server_name blog.etiantian.org;
return 301 https://$host$uri;
}
负载均衡的配置文件,但是这只是客户访问https,访问http时将会报错
[root@lb01 conf]# vim nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream server_pools {
server 10.0.0.7:443;
}
server {
listen 443;
server_name blog.etiantian.org;
ssl on;
ssl_certificate /application/nginx/conf/key/server.crt;
ssl_certificate_key /application/nginx/conf/key/server1024.key;
location / {
proxy_pass https://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}
进一步完善nginx配置文件:增加跳转信息,实现客户访问80端口跳转到443端口
[root@lb01 conf]# cat nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream server_pools {
server 10.0.0.7:443;
}
server {
listen 80;
server_name blog.etiantian.org;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443;
server_name blog.etiantian.org;
ssl on;
ssl_certificate /application/nginx/conf/key/server.crt;
ssl_certificate_key /application/nginx/conf/key/server1024.key;
location / {
proxy_pass https://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}
[root@lb01 conf]# cat nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream server_pools {
server 10.0.0.7:443;
}
server {
listen 80;
server_name blog.etiantian.org;
return 301 https://$host$uri;
}
server {
listen 443;
server_name blog.etiantian.org;
ssl on;
ssl_certificate /application/nginx/conf/key/server.crt;
ssl_certificate_key /application/nginx/conf/key/server1024.key;
location / {
proxy_pass https://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}
ssl on; 表示开启ssl
ssl_certificate /application/nginx/conf/key/server.crt; 私钥文件位置
ssl_certificate_key /application/nginx/conf/key/server1024.key; 请求证书位置
指定一个文件,其中宝库pem格式的ca证书,用于在启用ssl_stapling的情况下验证客户端证书和ocsp响应
off---关闭此功能
none ---缓慢使用会话缓存,但是nginx会告诉客户端会话可能会被重用,实际上不会将会话参数存储在缓存中
builtin 使用openssl内建缓存,为每worker进程私有
shared 在个worker之间使用一个共享的缓存
ssl_session_timeout 客户端可以复用ssl session cache中缓存的ssl桉树的有效时长
server_tokens off; 表示http响应报文中nginx版本号的显示
添加在http模块中即可
http://www.magedu.com/bbs/index.php
location /bbs/ {
alias /web/forum/;
} --> /web/forum/index.html
location /bbs/ {
root /web/forum/;
} --> /web/forum/bbs/index.html
root 表示追加在root目录后面
alias 表示对location中的url进行替换
nginx为什么要有缓存的这个功能?
缓存nginx的静态文件,因为这些文件都不是经常更新,便于缓存以减轻服务器的压力,另外,假如服务器有宕机的情况发生,对于用户发起的一些访问,web集群仍然可以进行处理
怎样实现nginx的缓存功能呢?proxy_cache就可以帮我们实现
proxy_cache zone
| off
;
定义用于缓存的共享内存区域,同一个区域可以在几个地方使用
proxy_cache_background_update on | off;
允许后台子请求来更新过期的缓存项目,而过时的缓存响应则返回给客户端,这里注意,有必要在更新时允许使用陈旧的缓存响应
proxy_cache_bypass string
...;
定义不会从缓存中获取响应的条件
proxy_cache_convert_head on
| off
;
启用或者禁用,将head方法转换为get进行缓存,禁用转换时,应将缓存配置为包含$request_method
proxy_cache_key string
;
定义缓存的关键字
proxy_cache_path path
[levels
=levels
] [use_temp_path
=on
|off
] keys_zone
=name
:size
[inactive
=time
] [max_size
=size
] [manager_files
=number
] [manager_sleep
=time
] [manager_threshold
=time
] [loader_files
=number
] [loader_sleep
=time
] [loader_threshold
=time
] [purger
=on
|off
] [purger_files
=number
] [purger_sleep
=time
] [purger_threshold
=time
];
设置缓存的路径和其他参数,缓存数据存储在文件中,缓存中的文件名是将MD5函数应用于缓存件的结果,level参数定义缓存的层次结构级别,
proxy_cache_valid
为不同的响应状态码设置不同的缓存时间
标签:网络安全
原文地址:http://blog.51cto.com/13520772/2085155