分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

HTTPS

发布时间:2023-09-06 01:45责任编辑:熊小新关键词:暂无标签
HTTPS

第1章 关于网络安全问题

1.1 网络安全涉及的问题:

数据机密性问题 ---数据可能会被第三方看到

数据完整性问题 ---传输的数据不能随意让任何人进行修改

身份验证问题 ---第一次进行通讯时,需要确认通讯双方的身份确认

1.1.1 数据机密性问题解决

a. 利用普通加密算法解决机密性问题

利用相应算法,对传输数据进行加密,再利用这个算法解密成真实数据

优点:实现了数据机密传输,避免了明文传输数据的危险性

缺点:利用机密算法,将明文改成密文,如果第三方获得加密算法,即可将传输密文再次变为明文

b. 利用对称加密算法解决机密性(重要的一种加密方式)

对称加密算法就好比将普通算法的规则手册放入到保险柜里,只有获取保险柜和保险柜钥匙才能获取算法手册

优点:密钥加密算法计算速度非常快,解决普通加密算法的安全问题

缺点:加解密过程的安全性完全依赖于密钥,并且对称加密密钥时公开的,当通讯对象过多时,无法解决密钥管理问题

1.1.2 数据完整性问题解决

1.1.2.1 利用单项加密算法(全网备份数据完整性)

根据数据生成特征码(数据指纹信息),接受数据防获取数据信息算出特征码,验证是否与发送过来的特征码相同

若特征码一致,表示数据完整性没有被破坏,若特征码不一致,表示数据被破坏,直接丢弃

扩展说明:

不同数据的特征码(数据指纹信息)是不可能一致的

优点:有效的解决了数据完整性的问题

缺点:没有考虑中间人攻击对数据信息的影响

a. 利用单项加密算法(加密特征码)

利用对称加密算法对数据加密的同时,也对特征码进行加密接收方拥有和发送方一样的密钥,才可以解密加密后的数据和特征码,而中间人的加密的特征码是没有办法让接收方进行解密的,所以接收方获取不了特征码,直,接丢弃数据

扩展说明:

对称密钥如何有效的让通讯双方获取呢?

需要实现密钥协商过程,即通过密钥交换机制,实现密钥交换机制的协议称为diffie-hellman协议

1.1.3 身份验证问题解决办法:

a. 利用非对称密钥加密算法(公钥加密算法)

发送方建立私钥和公钥,将公钥发送给接受方,从而实现发送数据方的身份验证

1.2 网络安全问题结论:实现网络安全性需要解决问题的顺序为:

1. 身份验证问题

2. 数据完整性问题

3. 数据机密性问题

1.3 网络安全证书由来:

根据上述结论可知,网络安全性最首先要解决的就是身份验证问题,而解决身份验证问题,最主要的方式就是借助私钥和公钥,而最主要的公钥信息获取就变得非常重要,利用第三方公正者,公正公钥信息

目前,标准的证书存储格式是x509,还有其他的证书格式等,

证书需要包含的内容为: 证书—×××

公钥信息,以及证书过期时间

证书该如何被使用 不用关注

ca颁发机构信息

ca签名的校验码

1.4 总结生成随机数的方法:

第2章 openssl软件详细说明:

用途:openssl就是一个模拟ca的行为的工具,有了它你就是一个ca,可以签发请求证书文件,以及生成crl列表

2.1 查看openssl版本信息:

[root@web01 ~]# openssl version

OpenSSL 1.0.1e-fips 11 Feb 2013

2.2 获取openssl配置文件信息:

[root@web01 ~]# cat /etc/pki/tls/openssl.cnf 此配置文件350多行,主要用与配置成私有ca时使用

2.2.1 举例说明:加密一个文件

[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参数,主要用于避免密码加密后,对密码串的反推

2.3 生成和用户一样的密码串

openssl passwd -1

2.4 生成伪随机数方法:

[root@web01 tmp]# openssl rand -base64 22

atl7XjeNmYKhmmjezbNQm1aLFSbE0g==

openssl软件建立私有ca(证书颁发机构)

第3章 实现https:

3.1 生产环境中实现过程:

1. 生成私钥(相当于出生证明)和请求证书文件(户口本)

2. 根据请求的证书文件信息,证书机构生成证书文件(×××)

3. 企业网站利用证书,实现用户安全认证访问

3.2 模拟证书颁发机构颁发程序:

3.2.1 生成私钥文件信息的三种方法:

[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功能

3.2.2 生成一个随机密码串:

[root@web01 key]# openssl passwd 2344555

3DavZjsuEfQ1A

说明:在企业中,用户可能会忘记自己的密码,这时需要工作人员帮助其进行重置密码,可利用openssl命令生成加密信息,复制到数据库中,将密码告知用户,并当用户登录后及时修改密码

3.2.3 生成自签署的证书:

[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 查看证书中的信息

3.2.4 ca自签发证书实际创建过程

[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 生成自签发证书

第4章 利用证书实现https访问nginx服务:

4.1 安装openssl软件:

# yum install openssl

# yum install openssl-devel

4.2 进行证书目录规划

[root@web01 CA]# cd /application/nginx/conf

[root@web01 conf]# mkdir key

4.3 创建私钥文件 ----生成自己的身份信息

创建服务器私钥,命令会让你输入一个口令:这里是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

4.4 创建请求证书:

创建签名请求的证书(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

4.5 配置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;

}

4.6 单台web实现http访问自动跳转到https:

4.6.1 方法一:利用优雅显示错误跳转功能实现---497内置错误码

[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;

}

}

4.6.2 方法二:利用地址重写,实现80端口跳转443端口

server {

listen 80;

server_name blog.etiantian.org;

rewrite ^(.*)$ https://$host$1 permanent;

} 在http模块中假如即可

4.6.3 方法三:利用返回状态码实现跳转访问

server {

listen 80;

server_name blog.etiantian.org;

return 301 https://$host$uri;

}

4.7 利用反向代理服务器进行http跳转到https:

负载均衡的配置文件,但是这只是客户访问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端口

4.7.1 第一种方法:

[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;

}

}

}

4.7.2 第二种方法:根据返回状态码进行跳转,如果返回什么状态码,我就进行跳转

[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;

}

}

}

第5章 关于nginx的ssl模块:

5.1 ssl模块:

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桉树的有效时长

5.2 隐藏版本信息:

server_tokens off; 表示http响应报文中nginx版本号的显示

添加在http模块中即可

5.3 路径别名alias:

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进行替换

5.4 nginx缓存功能

nginx为什么要有缓存的这个功能?

缓存nginx的静态文件,因为这些文件都不是经常更新,便于缓存以减轻服务器的压力,另外,假如服务器有宕机的情况发生,对于用户发起的一些访问,web集群仍然可以进行处理

怎样实现nginx的缓存功能呢?proxy_cache就可以帮我们实现

proxy_cachezone|off;

定义用于缓存的共享内存区域,同一个区域可以在几个地方使用


proxy_cache_background_updateon|off;

允许后台子请求来更新过期的缓存项目,而过时的缓存响应则返回给客户端,这里注意,有必要在更新时允许使用陈旧的缓存响应

proxy_cache_bypassstring...;

定义不会从缓存中获取响应的条件

proxy_cache_convert_headon|off;

启用或者禁用,将head方法转换为get进行缓存,禁用转换时,应将缓存配置为包含$request_method

proxy_cache_keystring;

定义缓存的关键字

proxy_cache_pathpath[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

为不同的响应状态码设置不同的缓存时间

第6章 openssl配置文件说明:


HTTPS

原文地址:http://blog.51cto.com/13520772/2085155

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved