1、浏览器发起往服务器的 443 端口发起请求,请求携带了浏览器支持的加密算法和哈希算法。
2、服务器收到请求,选择浏览器支持的加密算法和哈希算法。
3、服务器下将数字证书返回给浏览器,这里的数字证书可以是向某个可靠机构申请的,也可以是自制的。 (注释:证书包括以下这些内容:1. 证书序列号。2. 证书过期时间。3. 站点组织名。4. 站点DNS主机名。5. 站点公钥。6. 证书颁发者名。7. 证书签名。因为证书就是要给大家用的,所以不需要加密传输)
4、浏览器进入数字证书认证环节,这一部分是浏览器内置的 TSL 完成的:
4.1 首先浏览器会从内置的证书列表中索引,找到服务器下发证书对应的机构,如果没有找到,此时就会提示用户该证书是不是由权威机构颁发,是不可信任的。如果查到了对应的机构,则取出该机构颁发的公钥。
4.2 用机构的证书公钥解密得到证书的内容和证书签名,内容包括网站的网址、网站的公钥、证书的有效期等。浏览器会先验证证书签名的合法性(验证过程类似上面 Bob 和 Susan 的通信)。签名通过后,浏览器验证证书记录的网址是否和当前网址是一致的,不一致会提示用户。如果网址一致会检查证书有效期,证书过期了也会提示用户。这些都通过认证时,浏览器就可以安全使用证书中的网站公钥了。
4.3 浏览器生成一个随机数 R,并使用网站公钥对 R 进行加密。
5、浏览器将加密的 R 传送给服务器。
6、服务器用自己的私钥解密得到 R。
7、服务器以 R 为密钥使用了对称加密算法加密网页内容并传输给浏览器。
8、浏览器以 R 为密钥使用之前约定好的解密算法获取网页内容。
注释:
第3步中,证书的内容包含的证书的签名是什么?签名是指利用上一层证书的私钥,加密一些元信息(证书所有者的信息,包括基本信息,公钥,证书生效域名等)。这样,当收到签名证书时,只需要根据CA提供的公钥对签名解密,验证元信息是否一致,就可以判断当前证书是否合法。一句话来说就是,每个证书会对下一层的证书合法性做担保 。
第4步中,怎么认证数字证书?
客户端怎么确认你的证书是合法的呢。首先你的证书会在https握手过程中被传递到浏览器,浏览器从你的证书中找到了颁发者,从颁发者的证书(如果你电脑上有的话)又找到了CA的证书(CA证书会在操作系统安装时就安装好,所以每个人电脑上都有根证书),使用CA证书中带的公钥来对颁发者证书做验签,一旦匹配,说明你电脑上的颁发者证书不是伪造的,同理,再用颁发者证书中的公钥去验证你的证书,以此证明你的证书不是伪造的。这样整个链状的验证,从而确保你的证书一定是直接或间接从CA签发的,这样浏览器地址栏会显示一个绿色的盾牌,表示你的网站能通过证书验证
如果你的电脑上没有颁发者证书(断链)或者你自己本身就是自签名证书(自己做CA,但是要记得,人家电脑上并没有装你的自签名根证书),那么浏览器会报警提示不能验证证书,问你是否还需要继续。
过几天有时间整理下防止抓包的文档。
原文地址
我们知道,HTTP请求都是明文传输的,所谓的明文指的是没有经过加密的信息,如果HTTP请求被黑客拦截,并且里面含有银行卡密码等敏感数据的话,会非常危险。为了解决这个问题,Netscape 公司制定了HTTPS协议,HTTPS可以将数据加密传输,也就是传输的是密文,即便黑客在传输过程中拦截到数据也无法破译,这就保证了网络通信的安全。
在正式讲解HTTPS协议之前,我们首先要知道一些密码学的知识。
明文 : 明文指的是未被加密过的原始数据。
密文 :明文被某种加密算法加密之后,会变成密文,从而确保原始数据的安全。密文也可以被解密,得到原始的明文。
密钥 :密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥,分别应用在对称加密和非对称加密上。
对称加密 :对称加密又叫做私钥加密,即信息的发送方和接收方使用同一个密钥去加密和解密数据。对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密,常见的对称加密算法有DES、3DES、TDEA、Blowfish、RC5和IDEA。
其加密过程如下: 明文 + 加密算法 + 私钥 =>密文
解密过程如下: 密文 + 解密算法 + 私钥 =>明文
对称加密中用到的密钥叫做私钥,私钥表示个人私有的密钥,即该密钥不能被泄露。
其加密过程中的私钥与解密过程中用到的私钥是同一个密钥,这也是称加密之所以称之为“对称”的原因。由于对称加密的算法是公开的,所以一旦私钥被泄露,那么密文就很容易被破解,所以对称加密的缺点是密钥安全管理困难。
非对称加密 :非对称加密也叫做公钥加密。非对称加密与对称加密相比,其安全性更好。对称加密的通信双方使用相同的密钥,如果一方的密钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对密钥,即公钥和私钥,且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。
被公钥加密过的密文只能被私钥解密,过程如下:
明文 + 加密算法 + 公钥 =>密文, 密文 + 解密算法 + 私钥 =>明文
被私钥加密过的密文只能被公钥解密,过程如下:
明文 + 加密算法 + 私钥 =>密文, 密文 + 解密算法 + 公钥 =>明文
由于加密和解密使用了两个不同的密钥,这就是非对称加密“非对称”的原因。
非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
在非对称加密中使用的主要算法有:RSA、Elgamal、Rabin、D-H、ECC(椭圆曲线加密算法)等。
HTTPS协议 = HTTP协议 + SSL/TLS协议 ,在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密,需要用HTTP对加密后的数据进行传输,由此可以看出HTTPS是由HTTP和SSL/TLS一起合作完成的。
SSL的全称是Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。SSL协议在1994年被Netscape发明,后来各个浏览器均支持SSL,其最新的版本是3.0
TLS的全称是Transport Layer Security,即安全传输层协议,最新版本的TLS(Transport Layer Security,传输层安全协议)是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操作。虽然TLS与SSL3.0在加密算法上不同,但是在我们理解HTTPS的过程中,我们可以把SSL和TLS看做是同一个协议。
HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。数据是被对称加密传输的,对称加密过程需要客户端的一个密钥,为了确保能把该密钥安全传输到服务器端,采用非对称加密对该密钥进行加密传输,总的来说,对数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输。
以下图片来自于 limboy的博客
HTTPS在传输的过程中会涉及到三个密钥:
服务器端的公钥和私钥,用来进行非对称加密
客户端生成的随机密钥,用来进行对称加密
一个HTTPS请求实际上包含了两次HTTP传输,可以细分为8步。
1.客户端向服务器发起HTTPS请求,连接到服务器的443端口
2.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。
3.服务器将自己的公钥发送给客户端。
4.客户端收到服务器端的证书之后,会对证书进行检查,验证其合法性,如果发现发现证书有问题,那么HTTPS传输就无法继续。严格的说,这里应该是验证服务器发送的数字证书的合法性,关于客户端如何验证数字证书的合法性,下文会进行说明。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。
5.客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。
6.服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。
7.然后服务器将加密后的密文发送给客户端。
8.客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。
HTTP和HTTPS测试时稍有不同,HTTPS需要加载证书,端口也不一样,操作如下:2)使用JMeter自带的证书 ApacheJMeterTemporaryRootCA.crt(在bin目录下)
4)重启jmeter,如果是自己填写请求,https的端口一般是443,不再是http的80端口(当然也不一定是443,这个是可以配置的)如果测试中报错,就注意下证书有没有导入,请求的协议是不是填写https,端口号是不是填了443
HTTPS录制安装jmeter根证书到浏览器
1)关于HTTPS证书HTTP协议采用明文传输数据,如果是敏感数据,就不安全了,HTTPS(安全套接字层超文本传输协议)采用密文传输数据,在通讯中需要获得服务器的证书(公钥)
HTTPS连接使用证书来验证浏览器和Web服务器之间的连接。当通过HTTPS连接时,服务器将证书发送给浏览器。为了验证证书,浏览器检查服务器证书是否由其内置的根CA(Certificate.,CA)之一的证书颁发机构签名。还要检查证书是否为正确的主机或域,并且它有效且未过期。如果检查失败,它将提示用户,然后用户可以决定是否允许连接继续进行。
Jmeter要用自己的证书来拦截浏览器中的HTTPS连接。默认情况下,Jmeter的CA证书不会被浏览器信任,但是我们可以它可以作为可信证书安装到浏览器。一旦完成,生成的服务器证书将被浏览器接受。这样做的优点是,即使嵌入的HTTPS资源也可以被拦截,并且不需要重写每个新服务器的浏览器检查。
如上所述,当在Java 8下运行时,jmeter可以为每个服务器生成证书。为了顺利运行,jmeter所使用的根CA签名证书需要被浏览器信任。第一次启动HTTP代理服务器时,如果需要的话,它将生成证书。根CA证书被导出到当前启动目录中的名称为ApacheJMeterTemporaryRootCA.crt的文件中。当证书被设置时,jmeter将显示与当前证书详细信息的对话框。在这一点上,证书可以导入到浏览器中,按照下面的说明。
请注意,一旦根CA证书已安装为可信CA,浏览器将信任由其签名的任何证书。直到证书到期或证书从浏览器中删除的时候。因此,任何可以获取密钥存储和密码的人都可以使用证书生成证书,这些证书将被信任JMeTealCroot CA证书的任何浏览器所接受。由于这个原因,密钥存储和私钥的密码被随机生成,并且使用了一个短的有效期。密码存储在本地首选项区域中。请确保只有可信用户可以使用密钥存储库访问主机。
录制HTTPS需要导入jmeter的证书,那么如何导入证书呢?为HTTPS录制安装jmeter根证书到浏览器浏览器需要向服务器索要证书,以验证服务器不是假冒服务器。用jmeter代理时,用的jmeter的证书,而浏览器并不认可该证书,所以要将jmeter的证书导入浏览器。
回复关键词【jmeter】获取视频教程
JMeter历史文章查看点击干货分享--接口自动化
对此文有疑问?赶紧在留言区留言吧
看完本文有收获?请转发分享给更多人
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)