使用https进行通信加密

使用https进行通信加密

对于一些安全性需求比较高的项目,单单防止越权,sql,cookie等攻击发生的安全问题外,还需要注意的是请求被窃取。HTTP请求是明文传输,这样容易被黑客抓住漏洞进行攻击,如何攻击呢,下面举一个简单的例子。
很多项目都是用token进行用户信息的判断,然后我用抓包工具进行抓包,可以看到这条请求的token和cookie等信息被窃取到了,之后就可以利用这个token跳过用户登陆的那部分,直接进入系统进行使用。
使用https进行通信加密
这是极度不安全的。
包括对请求体,响应体进行抓包,这样可以对系统进行攻击。为了增加网站安全性,我用了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进行通信加密
上面是大致说了一下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" />

使用https进行通信加密
未完待续。。。