------------------------------------------------------------------------------------------------------

HTTPS  就是 HTTP协议+SSL协议;其中 SSL协议 位于HTTP与TCP/IP之间;

SSL协议的功能:① 确认服务器和客户端的身份(证书及握手协议)     ② 对数据进行加密(对称加密)   ③ 确保数据的完整性(HASH签名验证)

首先说一下SSL证书:

  SSL证书是由CA机构颁发的,部署SSL证书的服务器都是经过CA认证的 安全的;

  SSL证书内容:

        版本号(不同版本 证书格式不一样)

        序列号(同一个CA机构颁发的证书 序列号彼此不可能相同,即每个证书的序列号唯一)

        签名算法(不对称加密算法 RSA、DSA、DSS等  公钥加密,私钥解密)

        有效期(其实日期  结束日期)

        证书持有人信息

        持有人公钥(注意 这里是公钥  而且,仅有公钥)

        机构对证书的签名(不太懂)

  SSL证书 部署方式:不同的服务器(J2EE   Apache   iis),部署方式不同,J2EE的亲自部署了一下,没什么难度!后面也许会写到怎么在tomcat上部署SSL证书;

SSL的协议组成:

  SSL协议又可以细分为三个协议:握手协议   记录协议  警告协议

  握手协议的作用就是确认服务器的正确性,是不是要访问的服务器,协商加密算法。

  记录协议的作用就是对传输的数据进行压缩、封装、加密。

  警告协议的作用就是发出异常是产生警告

SSL的工作流程:

  1、握手       握手的作用是查看服务器的合法性,主要包括:证书是否过期、公钥是否能够解开签名、证书域名与浏览器域名是否匹配等

  首先由客户端发送一个消息(称为hello),里面包含着很多信息。协议版本号、支持的加密算法种类、用作产生密钥的随机数等等。

  

   

  服务器会回一个包,包含了在支持的加密算法中选取的用于加密应用数据的算法、以及SSL证书的信息(证书信息可以在IE浏览器 点击“锁”图标看到)

  

  浏览器对返回的证书上的信息进行验证,以便确认服务器是否合法;验证完成后,产生一个随机密码串,使用证书中的公钥对密码串进行加密,然后回包。这是交换密钥的过程!(然而这块的报文并没有看懂)

  这时候,服务器可以用自己的私钥对客户发来的包进行解密(不对称加密),得到密码串的明文。如果服务器不需要对你客户端进行验证,那么握手协议到此结束。之后传输的应用数据都会用这个密码串进行加密(对称加密)。

  如果服务器需要对客户端进行验证,那么此时在客户端也会有一个证书;客户端需要将自己的证书 还有 产生的一个随机串一起加密,给服务器端;服务器端进行验证。通过后,可能经过其他的一系列东东,再产生一个密码串,用这个密码串对应用数据进行加密!

  OK,下面总结一下:握手过程主要是完成 认证、协商算法、产生密钥这三件事,使用的是不对称加密;

            应用数据的传输使用的是对称加密 密钥就是握手中产生的密钥;

            HASH加密可能主要是为了保证信息的完整性。

浏览器如何验证证书的有效性:

  浏览器会在证书中找到CA机构的IP或者是域名,然后去CA机构对证书进行验证。

同一站点同时使用HTTP与HTTPS:

  HTTPS非对称加密非常耗CPU,所以一般只对敏感的网页信息使用HTTPS。

HTTPS与SSL的更多相关文章

  1. 聊聊HTTPS和SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...

  2. 浅谈HTTPS和SSL/TLS协议的背景和基础

    相关背景知识要说清楚HTTPS协议的实现原理,至少要需要如下几个背景知识.大致了解几个基础术语(HTTPS.SSL.TLS)的含义大致了解HTTP和TCP的关系(尤其是"短连接"和 ...

  3. 浅谈 HTTPS 和 SSL/TLS 协议的背景与基础

    来自:编程随想   >> 相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 ...

  4. 好程序员带你了解一下HTTPS和SSL/TLS协议的背景与基础

    >> 相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 TCP 的关系(尤其 ...

  5. 聊聊HTTPS和SSL/TLS协议 分类: 计算机网络 2015-07-11 21:41 4人阅读 评论(0) 收藏

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是"短连接 ...

  6. Https协议:SSL建立过程分析(也比较清楚,而且有OpenSSL的代码)

    web访问的两种方式: http协议,我们一般情况下是通过它访问web,因为它不要求太多的安全机制,使用起来也简单,很多web站点也只支持这种方式下的访问. https协议(Hypertext Tra ...

  7. HTTPS、SSL与数字证书介绍

    在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 HTTPS:在HTTP(超文本传输协议)基础上提出的一种安全 ...

  8. 【转】聊聊HTTPS和SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...

  9. Https系列之二:https的SSL证书在服务器端的部署,基于tomcat,spring boot

    Https系列会在下面几篇文章中分别作介绍: 一:https的简单介绍及SSL证书的生成二:https的SSL证书在服务器端的部署,基于tomcat,spring boot三:让服务器同时支持http ...

  10. Https系列之四:https的SSL证书在Android端基于okhttp,Retrofit的使用

    Https系列会在下面几篇文章中分别作介绍: 一:https的简单介绍及SSL证书的生成二:https的SSL证书在服务器端的部署,基于tomcat,spring boot三:让服务器同时支持http ...

随机推荐

  1. ValueStack背后的OGNL表达式

    原文地址:http://blog.csdn.net/li_tengfei/archive/2010/12/25/6098134.aspx 前言: Strut2的Action类通过属性可以获得所有相关的 ...

  2. Jekyll: .md to .html with self defined themes..

    theme is from here $ gem install jekyll bundler ~ $ jekyll new my-awesome-site ~ $ cd my-awesome-sit ...

  3. mysql、sqlserver数据库常见数据类型对应java中的的类型探究

    由于本次测试表的结构不涉及到主键的自增长,所以mysql.sqlserver建表语句相同: CREATE TABLE testType ( id INT NOT NULL DEFAULT 0, gen ...

  4. FTP、TFTP

      FTP 文件传送协议  (File Transfer Protocol) FTP是因特网上使用得最广泛的文件传送协议. 文件传送协议 FTP (File Transfer Protocol) 是因 ...

  5. java发布项目后注意小点,以及对于金额在java中的处理

    项目在发布之后,有时会进行一些小的地方的修改,特别是对于一些常量的修改,如定义的一些特殊账户,第三方的key值,当修改的时候,我之前就偷懒过,因为项目在服务器上面,访问速度也受到限制,替换整个项目很麻 ...

  6. 在选定的数据源上未找到名为“TitleSub”的字段或属

    在.NET开发过程中时常会遇到“在选定的数据源上未找到名为“TitleSub”的字段或属性”的错误”,导致这类错误的原因有很多,在我的项目中,详细情况是这样:1.有两个控件:DropDownList类 ...

  7. 使用AOP 使C#代码更清晰

    简介 如果你很熟悉面向方面编程(AOP),你就会知道给代码增加"切面"可以使代码更清晰并且具有可维护性.但是AOP通常都依赖于第三方类库或者硬编码的.net特性来工作.虽然这些实现 ...

  8. 【python问题系列--1】SyntaxError:Non-ASCII character '\xe5' in file kNN.py on line 2, but no encoding declared;

    因为Python在默认状态下不支持源文件中的编码所致.解决方案有如下三种: 一.在文件头部添加如下注释码: # coding=<encoding name> 例如,可添加# coding= ...

  9. 第13章 Swing程序设计----JDialog窗体

    JDialog窗体是Swing组件中的对话框 JDialog窗体的功能是从一个窗体中弹出另一个窗体,就像是在使用IE浏览器时弹出的确定对话框一样. 在应用程序中创建JDialog窗体需要实例化JDia ...

  10. 今天遇到了隐藏顶部菜单栏(top bar)的菜鸟问题,解决了。

    self.navigationController.navigationBarHidden = YES; http://stackoverflow.com/questions/3397381/hide ...