HTTP、HTTPS、SSL、TLS、SSH、FTP、SFTP

一、OSI七层模型

在这里插入图片描述

一、http 和 https

http 和 https 位于应用层
  1. http

    http 原理
    	① 客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过TCP 来完成的,一般 TCP 连接的端口号是80。
    	 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,
    	 后边是 MIME 信息包括请求修饰符、客户机信息和许可内容  。
    	② 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,
    	后边是 MIME 信息包括服务器信息、实体信息和可能的内容 。
    
  2. https

    **https** 协议
    	是**由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议**,
    主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。
    
    https 设计目标主要有三个:
    (1)数据保密性:保证数据内容在传输的过程中不会被第三方查看。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么 。
    (2)数据完整性:及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收 [4]  。
    (3)身份校验安全性:保证数据到达用户期望的目的地。就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方,通过身份校验来确保送对了地方 [4]  。
    
    **#################################################**
    
    https 主要由两部分组成:http + SSL / TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。
    服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。
    
    
    
    https 原理
    ① 客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器 [2]  ;
    ② 服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;
    	该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数 [2]  ;
    ③ 客户端对服务器的证书进行验证(有关验证证书,可以参考数字签名),并抽取服务器的公用密钥;
    	然后,再产生一个称作 pre_master_secret 的随机密码串,并使用服务器的公用密钥对其进行加密(参考非对称加 / 解密),并将加密后的信息发送给服务器 [2]  ;
    ④ 客户端与服务器端根据 pre_master_secret 以及客户端与服务器的随机数值独立计算出加密和 MAC密钥(参考 DH密钥交换算法) [2]  ;
    ⑤ 客户端将所有握手消息的 MAC 值发送给服务器 [2]  ;
    ⑥ 服务器将所有握手消息的 MAC 值发送给客户端 [2]  。
    

二、TLS 和 SSL

TLS 和 SSL 是会话层协议,用于加密数据。
可以用于 http->https的转换。

三、SSH

 Secure Shell,安全外壳协议,简称ssh,
 	是一种建立在应用层基础上的安全协议,通过对密码进行加密传输验证,
可在不安全的网络中对网络服务提供安全的传输环境,实现ssh客户端和ssh服务器端的连接,
所以ssh是基于C/S结构的。

##################################################
ssh协议建立连接的过程为:
	1.tcp三次握手
	2.ssh协议版本协商
	3.服务器端把公钥发给客户端
	4.加密算法协商
	5.客户端使用公钥对服务器端的密码加密并发送给服务器端
	6.服务器端收到后用自己的私钥解密后得到用户名密码和本地密码对比,验证成功允许登录,否则需要客户端再次输入密码验证

	ssh是应用层协议,它的传输层协议是tcp,所以在ssh登录之前必定会有tcp连接

	ssh是C/S架构,客户端通过ssh协议远程登录服务器端,
所以它必须要有服务器端的密码,并发送给服务器端,以便服务器验证成功后,才能运行客户端登录自己


上面是协议的部分,我们想实现的其实是如何远程登录,用到的软件是什么?

openssh
openssh是ssh协议的免费开源实现,有一个独立守护进程sshd

可以在Linux系统中安装openssh的服务端程序openssh-server,而客户端应用程序在Linux系统中默认是安装的

openssh服务可以通过/etc/ssh/sshd_config文件进行配置

下面我们看一下如何在两台ubuntu电脑间建立ssh远程登录连接

电脑上首先要确保安装了openssh-client和openssh-server程序

四、ftp 和 sftp

ftp 协议
	在主机之间传输文件时不提供任何安全通道。 使用tcp/ip协议。
	传输文件时密码和数据以纯文本格式发送,大多数情况下是不会加密的,安全性低。
	
sftp 协议
	在主机之间传输文件时提供一个安全的通道。
	sftp 只是ssh协议的一部分,是一种远程的登录信息。
	sftp传输文件时会进行数据加密,以二进制的形式传递,安全性较高.
	
	ftp 传输速率比sftp传输速率快一些,但是 sftp 安全性更高。
	使用 sftp 可以不用安装额外的服务器端程序,还比 ftp 更节省系统资源,不需要单独配置,使用起来非常简单。

版权声明:本文为qq_37233070原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。