HTTP学习三:HTTPS

HTTP学习三:HTTPS

1 HTTP安全问题

HTTP1.0/1.1在网络中是明文传输的,所以会被黑客进行攻击。

1.1 窃取数据

由于HTTP1.0/1.1是明文的,黑客很容易得到用户的重要数据,好比密码:

1.2 篡改数据

攻击者能够修改转帐帐户、金额等进行非法交易。

1.3 仿冒站点

攻击者能够经过仿冒HTTP站点,来同用户进行交互,用户不知道访问的站点是否是真实的。

2 HTTPS

2.1 RSA简单介绍

RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,可是想要对其乘积进行因式分解却极其困难,所以能够将乘积公开做为加密密钥。

A和B的加密通讯过程以下,反之也是一样的原理:linux

  • B用RSA公钥加密系统产生一对公私钥。
  • 公钥是公开的,私钥只有本身持有:B把公钥给A,本身保持私钥
  • 使用公钥加密的数据,只有私钥才能解开:A用公钥进行加密数据,加密后的数据只有B的私钥能解开
  • 用私钥进行签名的数据,能够用公钥验证:B把数据签名后,A用公钥验证,证实数据是B发来的

2.2 HTTPS原理

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,所以加密的详细内容就须要SSL.(来自百度百科)

2.2.1 协议层次

2.2.2 加密过程

2.2.2.1 用户请求

用户在浏览器里输入一个https网址,而后链接到server的443端口

2.2.2.2 生成公私钥

采用HTTPS协议的服务器必需要有一套数字证书,能够本身制做,也能够向组织申请。区别就是本身颁发的证书须要客户端验证经过,才能够继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。若是对公钥和私钥不太理解,能够想象成一把钥匙和一个锁头,只是全世界只有你一我的有这把钥匙,你能够把锁头给别人,别人能够用这个锁把重要的东西锁起来,而后发给你,由于只有你一我的有这把钥匙,因此只有你才能看到被这把锁锁起来的东西。

2.2.2.3 传送证书

这个证书其实就是公钥,只是包含了不少信息,如证书的颁发机构,过时时间等等。

2.2.2.4 客户端解析证书

这部分工做是有客户端的TLS来完成的,首先会验证公钥是否有效,好比颁发机构,过时时间等等,若是发现异常,则会弹出一个警告框,提示证书存在问题。若是证书没有问题,那么就生成一个随机值。而后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,否则看不到被锁住的内容。

2.2.2.5 传送加密随机值

这部分传送的是用证书加密后的随机值,目的就是让服务端获得这个随机值,之后客户端和服务端的通讯就能够经过这个随机值来进行加密解密了。

2.2.2.6 解密随机值

服务端用私钥解密后,获得了客户端传过来的随机值(私钥),而后把内容经过该值进行对称加密。所谓对称加密就是,将信息和私钥经过某种算法混合在一块儿,这样除非知道私钥,否则没法获取内容,而正好客户端和服务端都知道这个私钥,因此只要加密算法够彪悍,私钥够复杂,数据就够安全。

2.2.2.7 传输加密信息

这部分信息是服务段用私钥加密后的信息,能够在客户端被还原。

2.2.2.8 客户端解密加密信息

客户端用以前生成的私钥解密服务段传过来的信息,因而获取了解密后的内容。整个过程第三方即便监听到了数据,也一筹莫展。

2.3 HTTPS优缺点

2.3.1 缺点

  • HTTPS 下降用户访问速度
  • 证书费用以及更新维护(花钱吧)
  • HTTPS 消耗 CPU 资源,须要增长大量机器(花钱上硬件)
  • SSL 证书一般须要绑定 IP,不能在同一 IP 上绑定多个域名(能够花钱)

2.3.2 误区

HTTPS主要针对的是中间人攻击,能防止数据被窃取、篡改等,对其余形式的攻击好比csrf、xss就无能为力了。
对于部分使用HTTPS(好比登陆页面)的应用,重要身份信息通常保存在cookie中,在非HTTPS请求中,仍能看到cookie信息。

3 Nginx配置HTTPS

3.1 安装Nginx

  • 安装Nginx略过
  • 检查是否安装SSL模块:./nginx -V
  • 须要安装openssl(如今linux操做系统都自带)

3.2 准备私钥和证书

建立服务器私钥nginx

  • cd xxx/nginx/conf
  • mkdir key
  • cd key
  • openssl genrsa -des3 -out server.key 1024

签发证书算法

  • openssl req -new -key server.key -out server.csr

删除服务器私钥口令浏览器

  • cp server.key server.key.ori
  • openssl rsa -in server.key.ori -out server.key

生成自签名证书安全

  • openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

3.3 修改配置

nginx.conf服务器

listen       443;
   ssl on;
   ssl_certificate key/server.crt;
   ssl_certificate_key key/server.key;

3.3 访问

相关文章
相关标签/搜索