谈谈Nginx-HTTPS加密技术
超文本传输安全协议(HTTPS)是以安全为目标的HTTP通道,简单来说就是HTTP安全版。https由两个部分组成:HTTP+SSL/TLS,在http基础上加上了一层加密信息模块,服务端和客户端的信息插损胡都会通过TLS进行加密,传输的数据都是加密后的数据
为了解决HTTP协议的这些缺陷,需要使用另一种协议:HTTPS。为了数据传输的安全性,HTTPS在http的基础上加了SSL协议,SSL依靠证书验证身份,并为浏览器和服务器之间通信加密;
SSL证书是一种数字证书,使用Secure Socket Layer协议在浏览器和web服务器之间建立一条安全通道,从而实现数据信息在客户端和服务器之间的加密传输,保证双方传递信息的安全性,不可被第三方窃听,而且用户可以通过服务器证书验证所访问网站是否真实可靠;
加密的HTTPS和HTTP的区别:超文本传输协议HTTP协议被用于在web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的加密数据,如果攻击者截取了web浏览器和网站服务器之间的传输报文,就可以直接读取其中信息,因此,http协议不适合传输一些铭感信息;
HTTPS加密,解密,验证完成过程如图所示:
首先客户端发送请求,服务端接受到请求之后并申请生成公私秘钥,同时将公钥证书发送给客户端,客户端收到之后并通过TLS进行解析验证,如果证书没有问题就会在客户端生成一个加密随机值,将随机值发送给服务端,服务端接收到之后,用自己的私钥解密,从而得到这个随机值,然后通过这个随机值对内容进行对称加密。服务端将用私钥加密后的信息发送给客户端,最后,客户端用之前生成的私钥来解密服务器端发过来的信息,获取解密后的内容
1)客户端向服务端发起HTTPS请求,用户在浏览器输入https网址,然后连接到Nginx server的443端口
2)服务端采用https协议有一套数字证书,该证书可以自行配置,也可以向证书管理组织去申请,该证书其本质是公钥和私钥
3)将公钥传送给客户端,证书包含了很多信息,例如,证书的颁发机构,过期时间等等
4)客户端解析证书,由客户端的TLS完成,首先会验证公钥是否有效,比如颁发的机构,过期时间等,如果发生异常,则会弹出警告信息,提示证书存在问题,如果证书没有问题,就会随机生成数值,然后用证书对该随机数值进行加密
5)将证书加密后的随机值传送到服务器,让服务器获取该随机值,后续客户端和服务端可以通过该随机值来进行加密解密
6)服务端用私钥解密后,得到了客户端传过来的随机值,然后把内容通过该值进行了对称加密
7)服务端将私钥加密后的信息发给客户端
8)客户端用之前生成的私钥来解密服务端发送过来的信息,获取解密后的内容
【证申请与颁发过程】
#可以通过openssl生成服务端的RSA秘钥以及证书
[root@Nginx-web ~]# openssl genrsa -des3 -out server.key 1024
#创建签名请求的证书CSR
[root@Nginx-web ~]# openssl req -new -key server.key -out server.csr
#加载SSL支持的Nginx并使用私钥去除 口令
[root@Nginx-web ~]# cp server.key server.keybak
[root@Nginx-web ~]# openssl rsa -in server.keybak -out server.key
#自动签发证书
[root@Nginx-web ~]# openssl x509 -req -days 10240 -in server.csr -signkey server.key -out server.crt
[root@Nginx-web ~]# yum install -y pcre-devel openssl-devel popt-devel
[root@Nginx-web ~]# useradd -M -s /sbin/nologin nginx
[root@Nginx-web ~]# tar zxvf nginx-1.11.2.tar.gz -C /usr/src/
[root@Nginx-web nginx-1.11.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module
[root@Nginx-web nginx-1.11.2]# make
[root@Nginx-web nginx-1.11.2]# make install
[root@Nginx-web nginx-1.11.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
worker_processes ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
server {
listen ;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page /50x.html;
location = /50x.html {
root html;
}
} server {
listen ssl;
server_name localhost;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
}
如果仅仅是通过443端口访问Nginx web网站的话,那么配置文件如下(那么这个时候,你默认输入IP或者是域名是无法访问的,只能前面加上https)
worker_processes ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
server {
listen ssl;
server_name localhost;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
}
PS:配置完成之后这里就会有一个坑,报一下这个错,纠结了很久。。。其实当时看日志就可以知道,这是由于证书 的路径 错误~,我们将其拷贝到nginx的conf下面即可
[root@Nginx-web ~]# cp server.crt server.key /usr/local/nginx/conf/
重启Nginx-web服务,可通过netstat或者ps -ef 验证是否启动
谈谈Nginx-HTTPS加密技术的更多相关文章
- Nginx https加密以及nginx日志配置与管理
Nginx https加密以及nginx日志配置与管理 使用Nginx的优点Nginx作为WEB服务器,Nginx处理静态文件.索引文件.自动索引的效率非常高.Nginx作为代理服务器,Nginx可以 ...
- 爬虫相关概念和https加密
一.爬虫的相关概念 1.什么是爬虫 互联网:由网络设备(网线,路由器,交换机,防火墙)和一台台计算机连接而成,像一张网一样. 互联网建立目的:互联网的核心价值在与数据的共享/传递:数据是存放在一台台机 ...
- nginx的压缩、https加密实现、rewrite、常见盗链配置
Nginx 压缩功能 ngx_http_gzip_module #ngx_http_gzip_module 用gzip方法压缩响应数据,节约带宽 #启用或禁用gzip压缩,默认关闭 gzip on | ...
- Nginx采用https加密访问后出现的问题
线上的一个网站运行了一段时间,应领导要求,将其访问方式更改为https加密方式.更改为https后,网站访问正常,但网站注册功能不能正常使用了! 经过排查,是nginx配置里结合php部分漏洞了一个参 ...
- Nginx Configuration 免费HTTPS加密证书
Linux就该这么学 2018-05-11 实验环境:CentOS Linux release 7.3.1611 (Core) 内核版本:Linux version 3.10.0-514.el7.x8 ...
- nginx安装Lets Encrypt SSL免费HTTPS加密证书
Linux Nginx网站:Certbot安装配置Lets Encrypt SSL免费HTTPS加密证书 原文地址:https://renwole.com/archives/157 实验环境:Cent ...
- 十大免费SSL证书:网站免费添加HTTPS加密
SSL证书,用于加密HTTP协议,也就是HTTPS.随着淘宝.百度等网站纷纷实现全站Https加密访问,搜索引擎对于Https更加友好,加上互联网上越来越多的人重视隐私安全,站长们给网站添加SSL证书 ...
- PHP加密技术
一.MD5加密 直接干,这里以一个登录页面为例: <?php require_once 'config/database.config.php'; $act=$_REQUEST['act']; ...
- 斯诺登称NSA攻破互联网加密技术
据财新网报道,本已渐渐平静的斯诺登泄密事件在9月6日再掀波澜.英国<卫报>.美国<纽约时报>和美国非盈利调查新闻机构ProPublica联合报道称,根据斯诺登提供的大量文件,美 ...
随机推荐
- $Django redis内存数据库 (知识回顾cmd切换目录)
知识小回顾 #切换盘 C:\Users\WangDong>f: F:\> #切换文件 F:\>cd redis F:\redis> #返回上一级 F:\DJ\dj8>cd ...
- 阿里云rds mysql数据库数据恢复到ecs中
背景:aliyun上的rds数据库快满了,于是删除了某个备份的表后面大boss说是有用的表,需要恢复回来,阿里云有7天内的物理全量备份(通过percona-xtrabackup备份的)第一时间应该延长 ...
- docker里面运行jenkins详解
需求:将jenkins运行在docker中 思路:1.安装docker,并启动docker 服务 2.下载jenkins的docker镜像,然后运行. 前提知识:1.dockde ...
- 解决FTPClient上传文件为空,显示0字节
JAVA使用FTPClient上传文件时总是为空,而使用FileZilla客户端时却不会. 后来查了下资料,FTP服务器有被动模式和主动模式.(具体查另外资料) 在JAVA中将FTPClient设置为 ...
- 随机生成游戏用户昵称(nodejs版本)(含机器人头像,金币等)
1 前言 有时需要生成随机的用户(或机器人)昵称,头像,金币等,但又不想太生硬,可以现在网上爬一些常见昵称到文本中,然后读取出来,随机使用即可. 2 代码 var nickNameArr = []; ...
- mixins,generics(ApiView)
#生成序列化对象class BookModelSerizter(serializers.ModelSerializer): class Meta: model=Book fields='__all__ ...
- Android下利用zbar类库实现扫一扫
程序源代码及可执行文件下载地址:http://files.cnblogs.com/rainboy2010/zbardemo.zip Android下常用的条码扫描类库有zxing和zbar,比较了一下 ...
- 查看mysql库中所有表的信息--INFORMATION_SCHEMA
第一个查询看看库里有多少个表,表名等select * from INFORMATION_SCHEMA.TABLES information_schema这张数据表保存了MySQL服务器所有数据库的信息 ...
- Python学习-字符编码浅析
1.什么是字符编码 既然是简述那肯定是简单明了.字符编码,看名字就是一种字符的编码格式,由于计算机内部采用二进制,想要将人类的语言字符输入到计算机就需要一种编码格式,这就是字符编码.字符------- ...
- Gym - 101775A Chat Group 组合数+逆元+快速幂
It is said that a dormitory with 6 persons has 7 chat groups ^_^. But the number can be even larger: ...