https白嫖方案

1. 准备域名

既然是白嫖,那么域名我们就使用免费的域名就好了,我在freenom网站上注册的。免费的都是比较偏的域名后缀,不过无所谓,反正测试用而已

做好域名解析,我这里本地测试使用,所以解析到自己的内网ip(能指向本机就行啦)

2. 准备https证书

CA证书的话,有两种选择,一种使用自签名证书,一种使用CA官方证书;

区别

  1. 自签名证书是“黑户”,只能起到https加密的作用,但是无法被浏览器、操作系统承认
  2. 具体效果就是浏览器访问时会显示“不安全连接”的图标和提示
  3. 自签名证书无法防范“中间人攻击”方式,其实还是不安全的通信方式(客户端的可以自己去实现加密通信策略)
  4. 使用CA证书需要付费,并且有时限,要考虑成本和注意到期续费问题(过期的CA证书等同于自签名证书)

2.1 免费CA证书申请

免费的CA证书申请渠道很多,基本是1年期限,我这里使用freessl,注册流程忽略,没什么好说的(其中一步域名验证,只要做好相关解析,等解析生效验证过关即可)

2.1.1 生成CA证书

申请成功后,可以启动网站提供的客户端“keyManager”,在“证书管理--选中某个证书--更多--所有格式--输入私钥加密密码--导出”

导出后有多个文件夹,对应不同的web服务器,我将使用tomcat服务器,所以选用“.jks”后缀的私钥

3. 准备java web项目

我这里准备了个简单的spring boot项目,写了一个简单的接口,用于后续移动端https请求用

核心代码

入口类

package com.lawyee;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class AppBoot extends SpringBootServletInitializer {

    public static void main(String[] args) {

        SpringApplication.run(AppBoot.class);
    }

    // spring boot项目部署到独立的tomcat服务器上,需要继承SpringBootServletInitializer类,重写配置资源路径方法
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(AppBoot.class);
    }
}

准备接口

package com.lawyee.controller;

import com.lawyee.domain.Order;
import com.lawyee.domain.ResVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

@RestController
@RequestMapping("/order")
@Slf4j
public class OrderController {


    @RequestMapping("/findById")
    public ResVo findOne(String sn) {

        if (null == sn) {
            log.error("查询订单号为空");
            return new ResVo(0, "查询订单号为空", null);
        }

        if (sn.length() < 6) {
            log.warn("订单号不能小于6位");
            return new ResVo(0, "订单号不能小于6位", null);
        }

        Order order = new Order(sn, new Date(), "雅迪电动车");
        ResVo resVo = new ResVo(1, "查找到1个符合订单", order);

        log.debug("查询出1个结果,订单号:{},详细信息:{}", sn, order);

        return resVo;
    }
}

4. 准备https的web服务器

  1. 我这里使用apache-tomcat-8.5.31做web服务器,从官网下载即可;
  2. 把之前第二步中生成的CA证书tomcat目录下,.jks后缀的文件,拷贝到tomcat根目录下的conf文件夹中
  3. 将第三步中的java web工程,打包成war包,拷贝到tomcat根目录下的webapps文件夹中
  4. 修改conf文件夹下的server.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
 <Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!--APR library loader. Documentation at /docs/apr.html -->
  <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>

  <!-- Global JNDI resources
       Documentation at /docs/jndi-resources-howto.html
  -->
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
  </GlobalNamingResources>

  <Service name="Catalina">

    <!-- 使用80接口,指定跳转到443接口,https默认接口 -->
    <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443"/>
    <!-- 配置https,默认接口443,keystoreFile指定私钥文件路径, keystorePass指定私钥密码-->
    <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
        maxThreads="150" scheme="https" secure="true"
        keystoreFile="conf/lixian.jks"
        keystorePass="123456"
        clientAuth="false" sslProtocol="TLS" />


    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector URIEncoding="UTF-8" port="8009" protocol="AJP/1.3" redirectPort="8443"/>

    <Engine defaultHost="localhost" name="Catalina">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>

      <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt"/>

      </Host>
    </Engine>
  </Service>
</Server>
  1. 修改conf文件夹下的web.xml配置文件,让访问http也跳转到https,在文件最后,添加以下配置代码
    <login-config>
        <!-- Authorization setting for SSL -->
        <auth-method>CLIENT-CERT</auth-method>
        <realm-name>Client Cert Users-only Area</realm-name>
    </login-config>
    <security-constraint>
        <!-- Authorization setting for SSL -->
      <web-resource-collection>
        <web-resource-name>SSL</web-resource-name>
        <url-pattern>/*</url-pattern>
      </web-resource-collection>
      <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
      </user-data-constraint>
    </security-constraint> 
  1. 启动服务器后,使用证书对应的域名访问,浏览器地址栏左侧会显示一个锁的图标,点击开来会显示连接是安全的;(如果使用本地ip或者其他解析的域名,或者自签名证书,这里一样是显示不安全的链接)
  2. 注意:CA证书、证书对应的域名必须一致(包括记录值,除非你的证书是*通配的<通配的证书很贵的>)

5. 奉上以上文件

oschina项目地址

6. 客户端请求看效果

这里用iOS客户端发起请求,再用青花瓷抓包看看https通信的效果

6.1 准备OC网络请求代码

[[AFHTTPSessionManager manager] GET:@"https://www.lixian.ml/addr/order/findById" parameters:@{@"sn": @"6666231"} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {        
        NSLog(@"responseObject = %@", responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {        
        NSLog(@"error = %@", error);
}];

6.2 用青花瓷抓包

https抓包效果:通信自动被加密

使用https抓包截图.png

http抓包效果:通信未加密,全是明文

使用http的抓包截图.png

推荐文章
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342