“接口调通了” “业务逻辑完成了”。 但是你的数据是不是在裸奔呢。
虽然互联网上大部分的数据都是在裸奔。但是想想自己家的数据在互联网上裸奔 是不是很别扭。
要想不让数据裸奔有几个基本的要求:要改用https请求,要进行数据加密 要进行ssl身份验证。
简单说一下ssl:
SSL 证书遵守 SSL协议,通过在客户端浏览器和Web服务器之间建立一条SSL安全通道
一个有效、可信的 SSL 数字证书包括一个公共密钥和一个私用密钥。公共密钥用于加密信息,私用密钥用于解译加密的信息。因此,浏览器指向一个安全域时,SSL 将同步确认服务器和客户端,并创建一种加密方式和一个唯一的会话密钥。它们可以启动一个保证消息的隐私性和完整性的安全会话。
1. 如何使用JDK自签名SSL证书
- 下载jdk,并且配置环境变量。
- 生成客户端keystore。
keytool -genkeypair -alias client -keyalg RSA -validity 3650 -keypass 123456 -storepass 123456 -keystore client.jks
- 生成服务端keystore
keytool -genkeypair -alias server -keyalg RSA -validity 3650 -keypass 123456 -storepass 123456 -keystore server.keystore
- 导出客户端证书
keytool -export -alias client -file client.cer -keystore client.jks -storepass 123456
- 导出服务端证书
keytool -export -alias server -file server.cer -keystore server.keystore -storepass 123456
- 证书互换
keytool -import -v -alias server -file server.cer -keystore truststore.jks -storepass 123456 keytool -import -v -alias client -file client.cer -keystore server.keystore -storepass 123456
- 转换andoird能识别的 BKS 文件
下载链接:https://sourceforge.net/projects/portecle/
运行protecle.jar将client.jks和truststore.jks分别转换成client.bks和truststore.bks,然后放到android客户端的assert目录下。 -
在SpringBoot 后台项目中添加,然后将生成的server.keystore 文件放到根目录下
server.port=8888 #你生成的证书名字 server.ssl.key-store=server.keystore #密钥库密码 server.ssl.key-store-password=123456 server.ssl.keyStoreType=JKS server.ssl.trust-store=server.keystore server.ssl.trust-store-password=123456 server.ssl.client-auth=need
9. 在Android代码中,Retrofit 实例化的地方添加
// 先拿到okhttpbuilder
builder.sslSocketFactory(SSLHelper.getSSLCertifcation(CommonContext.appContext!!))
builder.hostnameVerifier(UnsafeHostNameVerifier())
//
private class UnsafeHostNameVerifier : HostnameVerifier {
override fun verify(hostname: String?, session: SSLSession?): Boolean {
if(TextUtils.equals(hostname, "10.0.2.2")) {//本地调试,这里可以替换成你自己服务器ip
return true
}
return false
}
}