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的加密通信过程如下,反之也是同样的原理:

  • 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 准备私钥和证书

创建服务器私钥

  • 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 访问

HTTP学习三:HTTPS的更多相关文章

  1. Android JNI学习(三)——Java与Native相互调用

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  2. (java)selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待

    selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待 本例包括窗口最大化,刷新,切换到指定窗口,后退,前进,获取当前窗口url等操作: import java. ...

  3. day 82 Vue学习三之vue组件

      Vue学习三之vue组件   本节目录 一 什么是组件 二 v-model双向数据绑定 三 组件基础 四 父子组件传值 五 平行组件传值 六 xxx 七 xxx 八 xxx 一 什么是组件 首先给 ...

  4. Salesforce LWC学习(三十九) lwc下quick action的recordId的问题和解决方案

    本篇参考: https://developer.salesforce.com/docs/component-library/bundle/force:hasRecordId/documentation ...

  5. ElasticSearch7.3学习(三十二)----logstash三大插件(input、filter、output)及其综合示例

    1. Logstash输入插件 1.1 input介绍 logstash支持很多数据源,比如说file,http,jdbc,s3等等 图片上面只是一少部分.详情见网址:https://www.elas ...

  6. Java开发学习(三十七)----SpringBoot多环境配置及配置文件分类

    一.多环境配置 在工作中,对于开发环境.测试环境.生产环境的配置肯定都不相同,比如我们开发阶段会在自己的电脑上安装 mysql ,连接自己电脑上的 mysql 即可,但是项目开发完毕后要上线就需要该配 ...

  7. haproxy学习之https配置

    haproxy学习之https配置   原文  http://www.cnblogs.com/ilanni/p/4941056.html   如何配置https,以及https在实际生产环境中的应用. ...

  8. TweenMax动画库学习(三)

    目录               TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)           ...

  9. Struts2框架学习(三) 数据处理

    Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...

随机推荐

  1. 21)pom 中的缺省值(default properties)

    1 引言 项目中build 时用到了maven-jar-plugin ,其中有一个 ${project.build.directory} <plugin> <artifactId&g ...

  2. MemCached 安装笔记

    安装步骤: 1. 下载libevent & memcached 源码包 分别把memcached和libevent下载回来,放到 /tmp 目录下: # cd /tmp     # wget ...

  3. Navicat Premium下sql导入中文乱码解决方案

    今天帮忙朋友找bug的时候,准备导入她数据库里面的数据,所以我就试图在mysql管理工具Navicat下面导入相应的mysql命令.结果发现导入的中文字符全部变成乱码,所以做了如下这种尝试: 在“连接 ...

  4. Android中<original-package>标签含义

    在AndroidManifest.xml中,<original-package>与<manifest package=...>中的区别:<original-package ...

  5. 转 powerdesigner12.5在64位JDK下连接mysql数据库问题

    前因:由于项目在研发的过程中,数据库字段需要不停的增加和修改,导致最初设计的数据库原型无法使用,后来就想到用powerdesinger来反转数据库表结构. 环境:win7 64位系统,本机装有64位j ...

  6. android wifi obtainmessage sendmessage解析

    obtainmessage 从message pool获取一个对象 sendmessage 将message插入message queue java中wait和notify是一对,wait进入睡眠等待 ...

  7. 安装CAS服务器

    1.简介 参考: http://www.coin163.com/java/cas/cas.html CAS主要用于多系统单点登录,属于WEB SSO.SSO体系主要角色有三种:User(多个),WEB ...

  8. 基于Linux的WebSphere性能调优与故障诊断

    一.关于was数据源等问题的配置 (1)关于was数据源连接池的最大.最小配置多大合适?怎样去计算? (2)关于JVM的配置,64位系统,64位WAS,最值小和最大配置多大最优?怎样去计算? (3)应 ...

  9. Java编程提高性能时需注意的地方

    1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资 ...

  10. WebView一般用法总结

    下面是webview常规的用法: import android.annotation.SuppressLint;import android.app.Activity;import android.o ...