使用https进行通信加密
使用https进行通信加密
对于一些安全性需求比较高的项目,单单防止越权,sql,cookie等攻击发生的安全问题外,还需要注意的是请求被窃取。HTTP请求是明文传输,这样容易被黑客抓住漏洞进行攻击,如何攻击呢,下面举一个简单的例子。
很多项目都是用token进行用户信息的判断,然后我用抓包工具进行抓包,可以看到这条请求的token和cookie等信息被窃取到了,之后就可以利用这个token跳过用户登陆的那部分,直接进入系统进行使用。
这是极度不安全的。
包括对请求体,响应体进行抓包,这样可以对系统进行攻击。为了增加网站安全性,我用了https发送请求。https是怎么与server建立连接的呢。
- http的3次握手
- step1:client生成随机数,与加密套件一起传输给server
- step2:server保存随机数,并生成新的随机数和证书(公钥)一起返回给client
- step3:client保存随机数,并生成新的随机数(称为预主**),对预主**进行公钥加密后发送给server
- step4:server对预主**进行私钥解密,之后合并之前的两次生成的随机数,进行计算后得出一个主**
- step5:client也进行随机数合并,生成主**
- step6:因为client和server主**都是自己生成的,中间人无法知道主**是多少,所以client可以和server进行交互了,client会将请求用主**进行对称解密,server对请求进行对称解密,当然,这些跟我们的代码没有任务关系,都是中间层自动处理的。
可以看到经过https加密后的请求是密文传输
上面是大致说了一下https,那边怎么将项目的请求转成https呢,我用tomcat进行演示。
在tomcat中找到以下位置,将其替换为:
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="**所在位置"
keystorePass="server"
clientAuth="false"
sslProtocol="SSL"
ciphers="TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,
TLS_ECDHE_RSA_WITH_RC4_128_SHA,
TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
TLS_RSA_WITH_AES_128_GCM_SHA256,
TLS_RSA_WITH_AES_128_CBC_SHA,
TLS_RSA_WITH_AES_256_CBC_SHA,
TLS_RSA_WITH_3DES_EDE_CBC_SHA,
TLS_RSA_WITH_RC4_128_SHA,
TLS_RSA_WITH_RC4_128_MD5"
sslEnabledProtocols="TLSv1.2" />
未完待续。。。