关于HTTPS的使用简介

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于HTTPS的使用简介相关的知识,希望对你有一定的参考价值。

HTTPS概述

HTTPS 可以认为是 HTTP + TLS。TLS 是传输层加密协议,它的前身是 SSL 协议,最早由netscape公司发布,后改名为 TLS。如果没有特别说明,SSL 和 TLS 说的都是同一个协议。

通信过程

1).浏览器将自己支持的一套加密规则发送给网站。
2).网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。
3).获得网站证书之后浏览器要做以下工作:
4) 验证证书的合法性,如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
5) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
6) 使用约定好的HASH计算握手消息,并使用生成的随机数密码对消息进行加密,最后将之前生成的所有信息发送给网站。   
7).网站接收浏览器发来的数据之后要做以下的操作:
8) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
9) 使用密码加密一段握手消息,发送给浏览器。
10).浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。

关键概念:

CA (Certificate Authority):认证权威或者认证中心,主要用途是为用户发放数字证书。认证中心(CA)的功能有:证书发放、证书更新、证书撤销和证书验证。

秘钥协商:浏览器和服务器每次新建会话时都使用非对称密钥交换算法协商出对称密钥,使用这些对称密钥完成应用数据的加解密和验证,整个会话过程中的密钥只在内存中生成和保存,而且每个会话的对称密钥都不相同(除非会话复用),中间者无法窃取。

常见的密钥交换算法有 RSA,ECDHE,DH,DHE 等算法。它们的特性如下:
RSA:算法实现简单,诞生于 1977 年,历史悠久,经过了长时间的破解测试,安全性高。缺点就是需要比较大的素数(目前常用的是 2048 位)来保证安全强度,很消耗 CPU 运算资源。RSA 是目前唯一一个既能用于密钥交换又能用于证书签名的算法。
DH:diffie-hellman 密钥交换算法,诞生时间比较早(1977 年),但是 1999 年才公开。缺点是比较消耗 CPU 性能。
ECDHE:使用椭圆曲线(ECC)的 DH 算法,优点是能用较小的素数(256 位)实现 RSA 相同的安全等级。缺点是算法实现复杂,用于密钥交换的历史不长,没有经过长时间的安全攻击测试。
ECDH:不支持 PFS,安全性低,同时无法实现 false start。
DHE:不支持 ECC。非常消耗 CPU 资源。

对称加密:使用秘钥协商获取到的对称秘钥加密通信。

数字证书:
    a、身份授权。确保浏览器访问的网站是经过 CA 验证的可信任的网站。
    b、分发公钥。每个数字证书都包含了注册者生成的公钥。在 SSL 握手时会通过 certificate 消息传输给客户端。

证书

根证书:用于验证CA机构的身份。
网站证书:用于验证网站身份。
验证过程为从证书链从下往上找到根证书,然后通过根证书 逐级向下验证证书的真实性。

nginx配置

server {
    listen       80;
    server_name  www.acme.com;

    location / {
        rewrite ^/(.*) https://www.acme.com/$1 permanent;
    }
}

server {
    listen    443 ssl;
    server_name  www.acme.com;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_certificate     /home/nginx/cer/acme.com.crt;
    ssl_certificate_key /home/nginx/cer/device.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  1440m;

    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    access_log  logs/www.acme.com.access.log  main;
    error_log  logs/www.acme.com.error.log  debug;

    location / {
            proxy_pass http://192.168.198.132:8080;
    }
}

使用脚本

参考download目录下:HTTPS-Turorial-Package.rar

以上是关于关于HTTPS的使用简介的主要内容,如果未能解决你的问题,请参考以下文章

关于代码片段的时间复杂度

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

关于HTTPS的使用简介

关于片段生命周期

下文中的哈希片段指的是啥?

SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段