序幕:飞鸽传书的危机
江湖最大情报组织"Data镖局"遭遇信任危机:
ini
// 传统HTTP传书(明文传输)
public void sendSecretMessage() {
String url = "http://kungfu-master.com/login";
String params = "username=张三&password=降龙十八掌";
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
conn.setRequestMethod("POST");
conn.getOutputStream().write(params.getBytes()); // 飞鸽传书裸奔!
}
黑风寨在半路截获飞鸽,轻松获取所有机密!总镖头紧急召见:"速请'金镖王'HTTPS出山!"
第一章:金镖奥秘(HTTPS原理)
1.1 金镖三重甲
金镖王展示传书秘术:

1.2 金锁银钥(非对称加密)
金镖王演示密钥交换:
ini
// 服务器持有钥对
KeyPair serverKeyPair = generateRSAKeyPair(); // 生成RSA密钥对
// 客户端获取公钥
PublicKey serverPublicKey = getServerPublicKey();
// 客户端生成会话密钥
SecretKey sessionKey = generateAESKey();
// 用公钥加密会话密钥
byte[] encryptedKey = encryptWithRSA(sessionKey, serverPublicKey);
// 服务器用私钥解密
PrivateKey serverPrivateKey = serverKeyPair.getPrivate();
SecretKey decryptedKey = decryptWithRSA(encryptedKey, serverPrivateKey);
第二章:金镖实战(Android实现)
2.1 基础金镖术(HttpsURLConnection)
java
public void safeSendMessage() throws IOException {
String httpsUrl = "https://kungfu-master.com/login";
// 创建安全连接
HttpsURLConnection conn = (HttpsURLConnection) new URL(httpsUrl).openConnection();
// 配置SSL参数
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[]{new DefaultTrustManager()}, null);
conn.setSSLSocketFactory(sslContext.getSocketFactory());
// 发送加密数据
conn.setRequestMethod("POST");
try (OutputStream os = conn.getOutputStream()) {
os.write(encryptData("password=武林秘籍")); // 实际会自动加密
}
// 获取加密响应
int responseCode = conn.getResponseCode();
if (responseCode == HttpsURLConnection.HTTP_OK) {
try (InputStream is = conn.getInputStream()) {
String response = readStream(is);
// 处理解密后的数据
}
}
}
2.2 现代金镖术(OkHttp)
java
// 使用OkHttp更简单
public void okhttpHttpsRequest() {
OkHttpClient client = new OkHttpClient.Builder()
.sslSocketFactory(createSSLSocketFactory(), getTrustManager())
.hostnameVerifier((hostname, session) -> true) // 谨慎使用!
.build();
Request request = new Request.Builder()
.url("https://kungfu-master.com/secret-move")
.post(RequestBody.create("{"move":"亢龙有悔"}", MediaType.get("application/json")))
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
// 处理加密响应
}
});
}
第三章:金镖认证(证书验证)
3.1 镖局令牌(数字证书)
金镖王展示认证令牌:
typescript
// 检查服务器证书
public class CustomTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) {}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) {
// 验证证书有效性
if (!isValidCertificate(chain[0])) {
throw new CertificateException("镖局令牌无效!");
}
}
private boolean isValidCertificate(X509Certificate cert) {
// 1. 检查有效期
cert.checkValidity();
// 2. 验证颁发机构(CA)
return cert.getIssuerDN().getName().contains("GlobalSign");
}
}
3.2 令牌锁定(Certificate Pinning)
csharp
// 防止伪造令牌(证书锁定)
OkHttpClient client = new OkHttpClient.Builder()
.certificatePinner(new CertificatePinner.Builder()
.add("kungfu-master.com", "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=")
.build())
.build();
第四章:金镖进阶(网络安全配置)
4.1 镖局安全条例(network_security_config)
创建 res/xml/network_security_config.xml
:
xml
xml
<network-security-config>
<!-- 信任用户安装的证书(调试用) -->
<debug-overrides>
<trust-anchors>
<certificates src="user" />
</trust-anchors>
</debug-overrides>
<!-- 生产环境配置 -->
<base-config cleartextTrafficPermitted="false">
<trust-anchors>
<certificates src="system" /> <!-- 只信任系统CA -->
</trust-anchors>
</base-config>
<!-- 特殊域名允许HTTP -->
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">insecure.kungfu.com</domain>
</domain-config>
</network-security-config>
4.2 启用安全条例
xml
xml
<!-- AndroidManifest.xml -->
<application
android:networkSecurityConfig="@xml/network_security_config"
... >
第五章:金镖原理揭秘
5.1 握手七步诀

ServerClientServerClientClientHello(支持算法列表)ServerHello(选定算法)+ 证书验证证书用公钥加密会话密钥用私钥解密会话密钥切换加密完成开始加密通信
5.2 Android中的SSL引擎
java
scss
// 简化版SSL引擎工作流程
public class SSLEngineSimulator {
public void handshake(SocketChannel channel) {
// 1. 交换加密算法信息
exchangeCipherSuites(channel);
// 2. 验证服务器证书
verifyCertificate(serverCertificate);
// 3. 生成会话密钥
SecretKey sessionKey = generateSessionKey();
// 4. 用公钥加密传输
byte[] encryptedKey = encrypt(sessionKey, serverPublicKey);
channel.write(ByteBuffer.wrap(encryptedKey));
// 5. 切换到对称加密
switchToAES(sessionKey);
}
}
终章:江湖箴言
金镖王临别赠言:
"HTTPS乃数据安全之基石:
- ✅ 加密传输:防中间人窃听
- ✅ 身份认证:防钓鱼服务器
- ✅ 数据完整:防内容篡改
现代Android开发必守铁律:
java
scssif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { useNetworkSecurityConfig(); // Android 7.0+ } else { useCertificatePinning(); // 兼容方案 } ```"
镖局金律石碑:
"HTTP如裸奔,HTTPS似金甲,
无HTTPS不传用户私密!"
附录:HTTPS性能优化
java
scss
// 会话复用减少握手开销
SSLSocketFactory factory = SSLContext.getDefault().getSocketFactory();
SSLSessionContext context = factory.getClientSessionContext();
context.setSessionCacheSize(32); // 缓存会话
context.setSessionTimeout(3600); // 超时时间(秒)
// 在OkHttp中启用会话复用
OkHttpClient client = new OkHttpClient.Builder()
.connectionSpecs(Arrays.asList(ConnectionSpec.MODERN_TLS))
.build();
"安全与性能兼得,方显高手本色!"