https那些事儿

如题所述

https是目前互联网中比较安全的一种信息传输方式,也是越来越受网民们的喜爱,因为它可以保障隐私数据在传输的过程中不被监听、窃取和篡改。那么https如何保证安全的呢?需要申请SSL证书吗?

想要了解https如何保证安全的,需要了解它的工作原理,一张图表示大致是这样的:

首先客户端发起https请求:客户端会发送一个密文族给服务器端。(采用https协议的服务器必须要有一张SSL证书,因此是需要申请SSL证书的。)

然后服务器端进行配置:服务器端则会从这些密文族中,挑选出一个。

然后是传送证书:这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构、过期时间等等。

接下来客户端解析证书:客户端会验证公钥是否有效。

然后进行传送加密信息:传送证书加密后的随机值。

服务器端进行解密信息:服务器端利用私钥进行解密,得到了客户端传过来的随机值,然后把内容通过该值进行对称加密。

传输加密后的信息:服务器端用随机值加密后的信息,可以在客户端被还原。

最后客户端进行解密信息:客户端用之前生成的随机值解密服务端传送过来的信息,于是获取了解密后的内容。

整个过程配合的非常完美,第三方是无法插手干预的,这就保障了数据在传输过程中的安全。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-08-02
https=http+TLS或SSL

数字证书的作用是将持有者的公钥和持有者的身份绑定起来,CA(电子商务认证授权机构 Certificate Authority)的签名是保证了这个绑定关系。

1.Certificate Format Version
证书版本号,用来指定证书格式用的X.509版本号,用于目录查询。
2.Certificate Serial Number
证书序列号,证书颁发者指定证书唯一序列号, 以标识CA发出的所有证书,用于目录查询。
3.Signature Algorithm Identifier
签名算法标识,用来指定本证书所用的签名算法(如SHA-1、RSA)。
4.Issuer
签发此证书的CA名称,用来指定签发证书的CA的可识别的唯一名称(DN, Distinguished Name),用于认证。
5.Validity Period
证书有效期,指定证书起始日期(notBefore)和终止日期(notAfter),用于校验证书的有效性。
6.Subject
用户主体名称,用来指定证书用户的X.500唯一名称(DN),用于认证。
7.Subject Public Key Information
用户主体公钥信息。
(1)Algorithm Identifier,算法标识。用来标识公钥使用的算法。
(2)Subject Public Key,用户主体公钥。用来标识公钥本身,用于加/解密和数字签名。
8.Issuer Unique ID
颁发者可选唯一标识,很少用。
9.Subject Unique ID
主体证书拥有者唯一标识,很少用。
10.Extensions
证书扩充部分(扩展域),用来指定额外信息。
11.Signature Acgorithm
CA签名算法标识。
12.CA Signature
CA签名。

可以理解为证书绑定,是指客户端直接保存服务端的证书,建立https连接时直接对比服务端返回的和客户端保存的两个证书是否一样,一样就表明证书是真的,不再去系统的信任证书机构里寻找验证。
SSL Pinning适用于非浏览器应用,因为浏览器跟很多未知服务端打交道,无法把每个服务端的证书都保存到本地,但CS架构的像手机APP事先已经知道要进行通信的服务端,可以直接在客户端保存这个服务端的证书用于校验。
为什么直接对比就能保证证书没问题?如果中间人从客户端取出证书,再伪装成服务端跟其他客户端通信,它发送给客户端的这个证书不就能通过验证吗?确实可以通过验证,但后续的流程走不下去,因为下一步客户端会用证书里的公钥加密,中间人没有这个证书的私钥就解不出内容,也就截获不到数据,这个证书的私钥只有真正的服务端有,中间人伪造证书主要伪造的是公钥。

为什么要用SSL Pinning?正常的验证方式不够吗?如果服务端的证书是从受信任的的CA机构颁发的,验证是没问题的,但CA机构颁发证书比较昂贵,小企业或个人用户可能会选择自己颁发证书,这样就无法通过系统受信任的CA机构列表验证这个证书的真伪了,所以需要SSL Pinning这样的方式去验证。

HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。握手过程的简单描述如下:
1.浏览器将自己支持的一套加密规则发送给网站。
2.网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
3.获得网站证书之后浏览器要做以下工作:
a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
c) 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
4.网站接收浏览器发来的数据之后要做以下的操作:
a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
b) 使用密码加密一段握手消息,发送给浏览器。
5.浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。
这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。另外,HTTPS一般使用的加密与HASH算法如下:

非对称加密算法:RSA,DSA/DSS

对称加密算法:AES,RC4,3DES

HASH算法:MD5,SHA1,SHA256

双向认证和单向认证原理基本差不多,只是除了客户端需要认证服务端以外,增加了服务端对客户端的认证,具体过程如下:
第2个回答  2023-04-13
HTTPS就是,申请的SSL证书安装到服务器环境实现的安全协议。
大家正在搜