使用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" />

2.添加信任证书
详情百度。。。

双向认证

1.将tomcat server.xml中8443连接的那一段配置改为:

<Connector port="443"  
       protocol="org.apache.coyote.http11.Http11Protocol" 
       maxThreads="150"  
       SSLEnabled="true"  
       scheme="https" 
       secure="true" 
       keystoreFile="C:\Install\keystore" 
       keystorePass="server" 
       truststoreFile="C:\Install\client.truststore"
       truststorePass="server"
       clientAuth="true"  
       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" />

2.添加本地私钥

现在访问网站发现无法访问了,还不明白怎么回事,但你用Chrome访问时,还有一个提示: XX网站不接受您的登录证书,或者您可能没有提供登录证书。

先打开如下画面IE:internet选项→内容→证书
其他浏览器:选项→管理证书
在这里插入图片描述

点击导入,把自己制作的P12证书放入到“个人”目录下。注意:导入时要输入证书密码

这个时候在刷新页面就会看到如下画面,(由浏览器而定)在这里插入图片描述
在这里插入图片描述
点击确定以后,就可以访问成功了.(部分浏览器导入密钥后可能需要重启浏览器)

https双向认证也配置完成了。

tip:因为本篇博文主要讲配置,没有讲在服务端的信任证书库添加个人证书的的公钥,所以下面附上我生成证书的bat文件。

附上生成证书需要的bat内容

set SERVER_DN="CN=192.168.XXX.XXX, OU=cybersoft.com, O=cybersoft, L=CN, S=CN, C=CN" 
set CLIENT_DN="CN=cybersoft.com.tw, OU=cybersoft.com, O=cybersoft, L=CN, S=CN, C=CN"
set PASS_SET="client"
set SPASS_SET="server"
set CER_ROOT_PATH="e:\SSL"
:: 路径不存在则创建路径
if not exist %CER_ROOT_PATH% md %CER_ROOT_PATH%

::制作 keystore
keytool -genkey -alias cyber_server -keyalg RSA -keystore %CER_ROOT_PATH%/keystore -dname %SERVER_DN% -storepass %SPASS_SET% -keypass %SPASS_SET% -validity 36500

keytool -genkey -alias cyber_client -keyalg RSA -storetype PKCS12 -keystore %CER_ROOT_PATH%/client.key.p12 -dname %SERVER_DN% -keypass %PASS_SET% -storepass %PASS_SET% -validity 36500

keytool -export -alias cyber_server -keystore %CER_ROOT_PATH%/keystore -storepass %SPASS_SET% -rfc -file %CER_ROOT_PATH%/server.cer

keytool -export -alias cyber_client -storetype PKCS12 -keystore %CER_ROOT_PATH%/client.key.p12 -storepass %PASS_SET% -rfc -file %CER_ROOT_PATH%/client.cer

keytool -import -file %CER_ROOT_PATH%/server.cer -storepass %PASS_SET% -keystore %CER_ROOT_PATH%/truststore.jks -noprompt

keytool -import -file %CER_ROOT_PATH%/client.cer -storepass %SPASS_SET% -keystore %CER_ROOT_PATH%/client.truststore -noprompt

pause

其中的192.168.XXX.XXX,请修改为自己的域名或IP

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

97年的典藏版

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值