
1) 【一句话结论】移动端与服务器通信安全通过HTTPS/TLS实现,核心是证书链验证确保身份可信,选择合适TLS版本保证加密强度,移动端需重点管理证书(如信任库、自签处理)并优化握手(如预共享密钥、会话复用)。
2) 【原理/概念讲解】HTTPS是在HTTP基础上叠加TLS/SSL加密传输,TLS是传输层安全协议,用于建立安全连接。证书由CA(如Let's Encrypt、自建CA)颁发,包含服务器公钥、域名、有效期等信息,客户端通过验证证书的签名(CA的公钥)确认服务器身份。握手过程(TLS Handshake)分为四阶段:客户端发送ClientHello(请求TLS版本、加密算法、随机数),服务器返回ServerHello(确认TLS版本、加密算法、随机数),交换证书(服务器发证书链,客户端发证书),客户端验证证书后协商加密密钥,最后完成握手。类比:就像两人见面,先出示身份证(证书)确认身份,再用密码锁(加密算法)传递秘密(数据)。
3) 【对比与适用场景】
| 对比项 | HTTPS(TLS) | HTTP(明文) |
|---|---|---|
| 传输 | 加密(TLS) | 明文 |
| 服务器身份验证 | 证书验证(CA) | 无 |
| 数据完整性 | MAC校验 | 无 |
| 安全级别 | 高(敏感数据) | 低(非敏感) |
| 适用场景 | 登录、支付、用户数据 | 内部通信、非敏感内容 |
(TLS版本对比表)
| 特性 | TLS 1.2 | TLS 1.3 |
|---|---|---|
| 标准时间 | 2015年 | 2018年 |
| 加密强度 | AES-128/256 | 更强(支持零知识证明) |
| 性能 | 4次握手(2次密钥交换) | 1次握手(减少通信量) |
| 安全漏洞 | 存在POODLE等漏洞 | 无已知重大漏洞 |
| 适用场景 | 兼容性要求高、旧设备 | 新应用、性能敏感、无旧设备兼容 |
4) 【示例】(OkHttp发起HTTPS请求伪代码,展示证书验证与握手):
// 1. 配置SSLContext(加载信任库,验证证书链)
TrustManager[] trustManagers = {new X509TrustManager() {
@Override public X509Certificate[] getAcceptedIssuers() { return null; }
@Override public void checkClientTrusted(X509Certificate[] chain, String authType) {}
@Override public void checkServerTrusted(X509Certificate[] chain, String authType) {
// 验证证书链(检查中间CA证书是否可信)
}
}};
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustManagers, new java.security.SecureRandom());
// 2. 创建OkHttpClient(设置SSLContext)
OkHttpClient client = new OkHttpClient.Builder()
.sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustManagers[0])
.hostnameVerifier((hostname, session) -> hostname.equals("api.360.cn")) // 验证域名
.build();
// 3. 发起GET请求
Request request = new Request.Builder()
.url("https://api.360.cn/user/info")
.build();
client.newCall(request).enqueue(new Callback() {
@Override public void onFailure(Call call, IOException e) { e.printStackTrace(); }
@Override public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
System.out.println("成功获取数据:" + response.body().string());
}
}
});
(代码说明:通过自定义TrustManager实现证书链验证,确保服务器证书由可信CA颁发;域名验证防止劫持。)
5) 【面试口播版答案】(约90秒):
“面试官您好,移动端与服务器通信安全的核心是通过HTTPS/TLS实现。首先,HTTPS通过TLS加密传输数据,同时通过证书验证服务器身份。具体来说,TLS握手过程会交换证书,客户端验证证书的签名(由CA颁发),确认服务器是合法的。移动端实现时,关键点包括:一是证书管理,比如加载系统信任库或自定义信任库,处理自签名证书(如开发环境);二是TLS版本选择,优先使用TLS1.3,因为它性能更好(1次握手,减少通信量),且安全性更高,避免旧版本漏洞;三是握手优化,比如在开发环境使用预共享密钥(PSK),减少握手轮次,提升启动速度。比如,我们通过OkHttp配置SSLContext,加载包含360自签证书的信任库,验证服务器证书链,确保通信安全。总结来说,通过HTTPS/TLS的加密和证书验证,结合合适的TLS版本和握手优化,能有效保证移动端与服务器通信的安全。”
6) 【追问清单】
7) 【常见坑/雷区】