HTTPS详解及HTTPS实验

news2024/11/14 1:30:47

目录

HTTPS

一,https在参考模型中的位置

二,什么是HTTPS

三,什么是SSL

1,SSL 协议分为两层:

2,SSL 协议提供的服务:

 四,HTTPS的加密方式

1,常见的加密算法

2,X.509

3,PKI

4,X.509 通用的证书格式包含三个文件:key,csr,crt。

五,TTL四次握手

六,HTTPS实验 

实验一:

自己创建ca机构,利用自己生成server.crt来完成通过https来访问网站

 

实验二:

基于虚拟目录和用户控制的 web 网站


HTTPS

一,https在参考模型中的位置

tcp/ip:                        https

应用层: http              http

                                  安全套接字层: ssl/tls

传输层:tcp/udp         tcp

网络层

数据链路层 -》物理层

物理层

二,什么是HTTPS

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的 HTTP 通道。HTTPS 并不是一个新协议,而是 HTTP+SSL(TLS)。原本 HTTP 先 和 TCP(假定传输层是 TCP 协议)直接通信,而加了 SSL 后,就变成 HTTP 先和 SSL 通信,再由 SSL 和 TCP 通信,相当于 SSL 被嵌在了 HTTP 和 TCP 之间。

三,什么是SSL

SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。它是在上世纪 90 年代中期,由网景公司设计的。到了 1999 年,SSL 应用广泛,已经成为互联网上 的事实标准。IETF 就把 SSL 标准化。标准化之后 SSL 被改为 TLS(Transport Layer Security 传输层安全协议)。

 

1,SSL 协议分为两层:

• SSL 记录协议 (SSL Record Protocol):它建立在可靠的传输协议(如 TCP)

之上,为高层协议提供数据封装、压缩、加密等基本功能。

 

SSL 握手协议SSL Handshake Protocol):它建立在 SSL 记录协议之上,用

于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加

密密钥等。

2,SSL 协议提供的服务:

1)认证用户和服务器,确保数据发送到正确的客户机和服务器

2)加密数据以防止数据中途被窃取

3)维护数据的完整性,确保数据在传输过程中不被改变。

 

 四,HTTPS的加密方式

由于公开密钥比共享密钥要慢,所以我们就需要综合一下他们两者的优缺点,使他

们共同使用,而这也是 HTTPS 采用的加密方式。在交换密钥阶段使用公开密 钥加

密方式,之后建立通信交换报文阶段则使用共享密钥加密方式。

 

如何证明公开密钥本身是货真价实的公开密钥?如,正准备和某台服务器建立公

开密钥加密方式下的通信时,如何证明收到的公开密钥就是原本预想的那台服务器

发行的公开密钥。或许在公开密钥传输过程中,真正的公开密钥已经被攻击者替换

掉了。这个时候就需要第三方公证单位来帮忙啦。

 

CA (certificate authority)就是一个公认的公证单位,你可以自行产生一把密钥且制作出必要的证书数据 并向 CA 单位注册,那么当客户端的浏览器在浏览时,该浏览器会主动向 CA 单位 确认该证书是否为合法注册过,如果是,那么该次连接才会建立,如果不是,浏览 器会发出警告信息,告知用户应避免建立连接。所以说,如此一来 WWW 服务器 不但有公证单位的证书,用户在建立连接时也比较有保障。

 

1,常见的加密算法

hash算法:MD2MD4MD5HAVALSHASHA-1HMACHMAC- MD5

                   HMAC-SHA1。

对称加密算法:DES3DESDESXBlowfishIDEARC4RC5RC6 AES

非对称加密算法:RSA、DSA、ECDSA    安全,慢

 

2,X.509

 

X.509 标准规定数字证书应包含标准化信息。具体地说,X.509 版本 3

证书包含下列字段:

版本号 证书所遵循的 X.509 标准的版本。

序列号 唯一标识证书且由证书颁发机构颁发的编号。

签名算法 CA 用于对证书进行数字签名的 hash 算法。

颁发者名称 实际颁发该证书的证书颁发机构的标识。

有效期 数字证书保持有效的时间段,并包含起始日期和过期日期。

使用者名称 数字证书所有者的姓名。

使用者公钥信息 与数字证书所有者关联的公钥以及与该公钥关联的特

  定公钥算法。

颁发者唯一标识符 可以用来唯一标识数字证书颁发者的信息。

使用者唯一标识符 可以用来唯一标识数字证书所有者的信息。

扩充信息 与证书的使用和处理有关的其他信息。

• 证书颁发机构的数字签名 使用指纹算法中指定的 HASH 算法以及证书

 颁发机构的私钥进行加密的数字签名。

 

 

 3,PKI

PKI(Public Key Infrastructure)公钥基础设施是提供公钥加密和数字签名服务的 系统或平台,目的是为了管理密钥和证书。一个机构通过采用 PKI 框架管理密钥和 证书可以建立一个安全的网络环境。PKI 主要包括四个部分:X.509 格式的证书(X.509 V3)和证书废止列表 CRL(X.509 V2);CA 操作协议;CA 管理协议;CA 政策制定。

 

 

 

Ls -l /etc/pki

 

 

lrwxrwxrwx. 1 root root    49 Jun 23  2020 cert.pem -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

drwxr-xr-x. 2 root root    74 Nov 29 21:28 certs

-rw-r--r--. 1 root root   412 Jul 20  2020 ct_log_list.cnf

drwxr-xr-x. 2 root root     6 Jul 20  2020 misc

-rw-r--r--. 1 root root 11225 Jul 20  2020 openssl.cnf

drwxr-xr-x. 2 root root    26 Nov 29 21:28 private

.pem: 证书

.crt: 证书

.key: 私钥

.csr: 服务器向第三方机构申请证书,.csr: 申请文件

4,X.509 通用的证书格式包含三个文件:key,csr,crt。

1、CRT

CRT 应该是 certificate 的三个字母,其实还是证书的意思。常见于 UNIX 系统,有可能是 PEM 编码,也有可能是 DER 编码,大多数应该是 PEM 编码,相信你已经知道怎么辨别。

2、CER

还是 certificate,还是证书。常见于 Windows 系统,同样的可能是 PEM 编码,也可能是 DER 编码,大多数应该是 DER 编码。

3、KEY

通常用来存放一个公钥或者私钥,并非 X.509 证书。编码同样的,可能是 PEM,也可能是 DER。

查看 KEY 的办法:openssl rsa -in mykey.key -text -noout   。

如果是 DER 格式的话,同理应该这样了:openssl rsa -in mykey.key -text -noout -inform der 。

4、CSR

Certificate,Signing Request,即证书签名请求。这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥(当然还附带了一些别的信息)。在生成这个申请的时候,同时也会生成一个私钥,私钥要自己保管好。做过 iOS APP 的朋友都应该知道是,怎么向苹果申请开发者证书的吧。

查看的办法:openssl req -noout -text -in my.csr (如果是 DER 格式的话照旧加上 -inform der,这里不写了)。

 

CA颁发证书中有一个数字签名:CA机构的公钥对签名进行解密:-》 HASH(INFO) -》 能拿出来INFO(不能)

就不能对HASH(INFO)进行更改

INFO:明文信息进行更改:-》 INFO信息改变了 -》 HASH(NEW_INFO) == HASH(INFO) -> 不相等

123456 -》 aaabbbb

123457 ->  aaaccccc

五,TTL四次握手

TLS四次握手

tcp连接:tcp三次握手

ssl握手协议

浏览器 -》 web服务器

clienthello  ->

随机数:client_random

会话ID:  session_id

加密套件:cipher suite  TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256

                                    TLS_

                ECDHE_ECDSA: 密钥交换算法

                AES_128: 对称加密的算法

                GCM_SHA256: HASH算法(完整性校验的算法)

压缩算法:null

扩展数据: extend

服务器-》 浏览器

serverhello:

tls的版本

随机数:server_random

会话ID:  session_id: null

加密套件:Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)

                客户端刚才加密套件有16个,服务器只有一个(协商之后的结果,告诉使用的加密套件是哪一个)

结果:协商使用的TLS的版本,以及使用的加密套件

第一个阶段:

clienthello

第二个阶段

serverhello

certificate: 发送证书

Certificate: 308206323082051aa003020102020c3e35a8ccf6deb780d152a595300d06092a864886f7… (id-at-commonName=*.ax1x.com)

Certificate: 3082044d30820335a003020102020b040000000001444ef03631300d06092a864886f70d… (id-at-commonName=AlphaSSL CA - SHA256 - G2,id-at-organizationName=GlobalSign nv-sa,id-at-countryName=BE)

server key exchange: 密钥交换, 服务器向客户端发送自己密钥交换的参数

                                   公钥,签名算法,签名

certificate request: 服务器可以要求浏览器来提供证书验证身份(做了这个设置有这个报文,如果没做这个设置是不会有这个报文的)

serverhello done: 通知消息来告诉客户端,第二阶段完成了

第三个阶段:

certificate: 如果在第二个阶段有certificate request报文的话:意味着服务器要验证客户端的身份

                 那么在第三个阶段就会有certificate报文

client key exchange: 提供客户端密钥交换的参数:ecdh

                                  Pubkey: aec4f086e8dadd557f26bb417f65fa5f7cf56dfb5e5b7fb143c9829a5bb70c3f

                                               使用公钥加密的随机数 -》 pre-master-key: 预备主密钥

产生了几个随机数?

client_random -> clienthello 客户端将client-random发送到服务器

server_random -》serverhello 服务器将server_randome 发送给客户端

pre_master_key -> 客户端会将这个随机数发往服务器

服务器和客户端是各自都掌握了三个随机数

certificate verify:证书验证,验证证书的正确性

change cipher spec:通知消息:改变加密的一个通知

encrypt handshake message:加密的握手消息(加密前边通信过程数据,hash算法进行加密)

new session ticket: 新的会话票据

change ciper spec: 改变编码的通知:通知对端后面传输的数据要进行加密了

encrypted handshage messages: 需要校验:客户端发送过来的encrypted handshake messages, 服务器也把自己之前和客户端的消息进行hash散列,拿到一个加密之后的字符串,发送客户端

客户端收到change cipher和encrypted handshake messages: 也要校验消息的完整性:校验成功了之后才去传输数据(对称加密,密钥:master secret)

certificate verify:证书验证,验证证书的正确性: 只有客户端发送了自己的证书才有这个数据包,

一个签名,对从第一条消息以来的所有握手消息的HMAC值(用master_secret)进行签名。

六,HTTPS实验

安装模块

Yum install mod_ssl -y

安装完成后tree /etc/httpd下面会产生一个ssl.conf文件

或者ls -l /etc/httpd/conf.d

使用命令vim /etc/httpd/conf.d/ssl.conf打开文件

1,Listen 443 https  监听443端口,使用https协议

2,会话缓存,会话超时时间

3,Ssl 使用的加密设备   内件

4,虚拟主机的配置

5,  错误日志。传输日志,访问日志,日志级别

6,在虚拟主机上启动或者关闭ssl

7,使用的ssl 版本;   sslv3就是tls

ssl代理的版本

反向代理提供负载均衡的功能

8,有16个加密条件,启动后会选择最优的加密条件

9,查看加密的策略

加密条件,使用的是系统的

代理的加密条件

(加密条件可以使用系统的额,亦可以指定固定的加密条件)

10,证书

11,私钥

没重启服务之前,/etc/pki/tls/目录下没有localhost.crt和localhost.key文件

重启服务后,系统会自动生成两个文件(证书)

访问浏览器时,也会从无法访问变成不安全

之前没有证书,重启服务后才有

 

实验一:

自己创建ca机构,利用自己生成server.crt来完成通过https来访问网站

安装命令openssl

创建目录 mkdir ca_learning

切换到目录下面  cd ca_learning/

一,搭建CA服务器

使用openssl生成自签名证书:

1.生成私钥(ca机构的私钥)

[root@wangjingjing ca_learning]# openssl genrsa -out ca.key 2048

2.得有证书(CA机构自己的证书)

   生成公钥:openssl rsa -in ca.key -pubout out ca.pub

[root@wangjingjing ca_learning]# openssl rsa -in ca.key -pubout -out ca.pub

   生成证书:[root@wangjingjing ca_learning]# openssl req -new -x509 -days 36500 -key ca.key -out ca.crt     (此命令为交互式命令)

第一步和第二步:搭建一个CA机构(私有的,你自己的,不是权威的)

# 一步生成私钥和证书

openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 36500 -out cert.crt

# 生成证书(非交互式的)

openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 36500 -out cert.crt -subj "/C=CN/ST=GuangDong/L=ShenZhen/O=SunFoBank/OU=IT Dept/CN=sunfobank.com/emailAddress=admin@sunfobank.com"

3.为服务器去签发证书

 服务器得先产生公钥和私钥

   提交证书申请文件.csr

   CA签发证书-> crt证书

   生成私钥:

 [root@wangjingjing ca_learning]# openssl genrsa -out server.key 2048

   生成申请文件:.csr(已经生成了公钥)

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

[root@wangjingjing ca_learning]# openssl req -new -key server.key -out server.csr

   将申请文件提交给CA机构(ca.key, ca.crt), 让ca机构去签发证书

[root@wangjingjing ca_learning]# openssl x509 -req -days 36500 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt

.srl序列号文件

                      x509: 签发509证书

                      -req: 说明输入是一个证书申请文件

                      -in:  指定申请文件

                      -CA: 指定CA机构的证书

                      -CAkey: 指定CA结构的私钥

                       -CAcreateserial: CA创建序列号:唯一标识

                        -out: 输出证书

二,利用自己生成server.crt来完成通过https来访问网站

 

1, 添加一个ip(使用已有ip 192.168.206.131)

2, 新建网站的目录(/www/ssl),

3, 新建首页文件(echo "this page is for ssl by https" > /www/ssl/index.html

 4,去在conf.d目录,去新建配置文件:myssl.conf

5,Vim /etc/httpd/conf.d/myssl.conf

6,重启服务

7,结果:

 

实验二:

基于虚拟目录和用户控制的 web 网站

 

虚拟目录  alias  别名

alias:别名: 针对的是:浏览器中输入URL, URL的路径path的那一部分映射到Linux上真正的目录:

DocumentRoot /www/ip/155 -> http://192.168.233.155 -> /www/ip/155

http://192.168.233.155/foo/path/test.html  -> /www/ip/155/foo/path/test.html

alias /foo/path -> /www/ip/155

http://192.168.233.155/foo/path/test.html  -> /www/ip/155/test.html

http://192.168.233.155/foo/path/test.html -> DocumentRoot /www/ip/155 -> URL -> /www/ip/155/foo/path/test.html

http://192.168.233.155/foo/path/test.html -> Alias /www/ip/155/foo -> URL -> /www/ip/155/foo/test.html

用户控制

用来设置密码

htpasswd

ht-> http passwd

1.访问网站需要登录:

   肯定要有登录的用户名和密码

2. 在配置文件中配置:用户认证

-c     Create the passwdfile. If passwdfile already exists, it is rewritten and truncated.: 创建密码文件;若存在,覆盖

1,创建一个目录用来存放密码文件

[root@wangjingjing ca_learning]# cd /usr/local/

[root@wangjingjing local]# mkdir http_dir


2,创建用户名xixi和密码123456

[root@wangjingjing local]# htpasswd -c /usr/local/http_dir/mypasswd xixi

3,在目录里面进行配置

AuthType Basic 基本认证类型(账号)

AuthName “Please login:” 提示信息,双引号必须有,可以更换为其它提示信息

AuthUserFile /etc/httpd/mymima 用户认证文件的用户名和密码指定的文件所在位置

Require user xiaoming xiaohong 指定这两个用户可以访问该服务器

4,重启服务

5,在浏览器访问192.168.206.133

针对网站访问的目录做的权限设置:使用用户基础认证的方式

注意登录的配置是配置在目录中的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/181798.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql知识点

目录 1.mysql聚合函数: 2.having(用来过滤数据): HAVING 不能单独使用,必须要跟 GROUP BY 一起使用 WHERE 与 HAVING 的对比 3.升序和降序 4.等于 5.实战demo: 1.mysql聚合函数: 常用的聚…

codeforces签到题之div3

前言 第一次codeforces,发现几个问题: 1,不知道选langua&…

17正交距阵和Gram-Schmidt正交化

标准正交向量与正交矩阵 上一节介绍过的正交向量,通过一个式子进行回顾,设q是标准正交向量组中的任意向量,则 这很好地表现了标准正交向量组内各向量的性质: 不同向量之间相互垂直(正交),向量…

Ribbon 负载均衡

介绍Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就…

屏幕录制软件推荐,分享这3款,简单好用

​网络上充斥着许多各种各样的屏幕录制软件,许多有选择困难的朋友可能会充满怀疑:哪个电脑屏幕录制软件很容易使用?屏幕录制软件推荐哪个比较好?别担心,今天,小编分享这这3个简单好用的屏幕录制软件&#x…

Day10 C++STL入门基础知识七——案例1【评委打分】

路漫漫其修远兮,吾将上下而求索 文章目录1. 承接上文1. 案例描述2. 实现思路3. 亿点点分析3.1 创建选手类3.1.1 具体思路3.1.2 代码展示3.2 创建5名选手并对其姓名、平均分进行初始化3.2.1 具体思路① 创建vector容器② 创建一个creatPlayer()函数a.调用函数b. 初始…

若依框架基于@PreAuthorize注解的权限控制

目录 一、Java注解(Annotation) 1. 概述 2. Annotation通用定义 (1)interface (2)Documented (3)Target(ElementType.TYPE) (4)Retention(Ret…

IDEA插件

Lombok用注解的方式,简化了 JavaBean 的编写。注解下面介绍一下常用的几个注解:Setter 注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。Getter 使用方法同上,区别在于生…

java基于ssm电梯服务管理信息系统的设计与实现源码+数据库

基于ssm电梯服务管理信息系统的设计与实现 技术支持 开发软件:Eclipse 项目类型:Webapp 数据库:MySQL 数据库连接池:druid 框架:SSM 数据库设计软件:PowerDesigner 前端界面开发:HTML/CSS…

Maven介绍

Maven介绍1、Maven的简单介绍2、Maven的优点3、Maven的基本知识3.1、Maven如何获取Jar包3.2、Maven仓库的分类4、Idea中的maven4.1、clean4.2、validate4.3、compile4.4、test(不常用)4.5、package4.6、verify(不常用)4.7、instal…

void*传数据,是不是像在黑洞里面拯救世界?

内核代码看到这样一个函数static inline void dev_set_drvdata(struct device *dev, void *data) {dev->driver_data data; }这个函数有什么用?看里面的代码含义大概就能知道,给 driver_data这个指针赋值,之后在其他地方就可以用这个指针…

《C语言高级》(二)------ 函数与指针 篇

目录 一、函数 1.1、创建和使用函数 1.2、全局变量与局部变量 1.3、函数的参数和返回 1.4、递归调用 1.5、斐波那契数列解法其三 1.6、汉诺塔 1.7、快速排序算法 二、指针 2.1、初识指针 2.2、指针与数组 2.3、多级指针 2.4、指针数组与数组指针 2.5、指针函数与函数指…

SpringCloud入门实战(五)-集成Ribbon

一、Ribbon简介 Spring Cloud Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单地说,就是在配置文件中列出Load Balancer(简称LB)后面所有…

python爬虫学习笔记-mongodb安装基本介绍pymongo使用

MongoDB数据存储 MongoDB是一个非关系型数据库(NoSQL). 非常适合超大数据集的存储, 由 C 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系…

Spring Cloud_OpenFeign服务接口调用

目录一、概述1.OpenFeign是什么2.能干嘛二、OpenFeign使用步骤1.接口注解2.新建Module3.POM4.YML5.主启动类6.业务类7.测试8.小总结三、OpenFeign超时控制1.超时设置,故意设置超时演示出错情况2.是什么3.YML中需要开启OpenFeign客户端超时控制四、OpenFeign日志打印…

论文投稿指南——中文核心期刊推荐(水路运输)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

Json的语法及使用

Json的语法及使用前言一、Json是什么?二、Json语法三、Json示例前言 在数据传输时用到Json格式,在此稍作记录。 一、Json是什么? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)JSON 是轻量级的文本…

零入门容器云网络实战-4->ip地址分类尝试

本篇文章主要用于收集、整理、总结关于IP地址相关知识点。 1、IP地址分类? IPv4地址是指IPv4协议使用的32位地址。 为了便于对IP地址进行管理, 根据IPv4地址的第一个字节,IPv4地址可以分为以下五类。 A类:0~127 B类&#xff1…

【Linux】Linux自动化构建工具make/makefile

文章目录🎪 Linux自动化构建工具make/makefile🚀 1.Makefile文件格式⭐1.1 简单makefile例子⭐1.2 概述⭐1.3 目标(target)⭐1.4 前置条件(prerequisites)⭐1.5 命令(commands)🚀 2.Makefile文件语法⭐2.1 注释⭐2.2 回声⭐2.3 通配符⭐2.4 变…

4-异步:非阻塞IO

4-异步:非阻塞I_O 简介 什么是Node.js的非阻塞I/O I/O 即 Input/Output. 也就是一个系统的输入和输出阻塞I/O和非阻塞I/O的却别就在于系统接收输入再到输出期间,能不能接收其他输入 对于这两句话的理解,可以把系统比作服务员,…