Android HTTPs 超简单实现(包含纸自制证书)
生成https证书(单向验证)
@(JAVAWEB)
1. 首先生成jks文件
window下直接cmd
命令 keytool -genkey -keysize 2048 -keyalg RSA -alias tomcat -keystore yourkeystore.jks
将yourkeystore.jks
改为你想要的名字

注意:
-
其中您的名字与姓氏最好填你的域名地址,如果是本地测试填localhost(就是localhost不是你的IP)
-
双字母国家和地区在CA机构中需要正确填写 中国为CN而不是Zh.
其他的可以直接任意输入,但是最好不要有特殊字符。
2.生成csr文件(本地可以忽略)
keytool -certreq -alias tomcat -file your.csr -keystore yourkeystore.jks
your.csr
改为你想要的名字,yourkeystore.jks
你刚生成的jsk文件名称.
注意:
这个CSR文件是CA机构来验证你信息的文件,后面不会用到.
3.生成CER文件
keytool -export -alias tomcat -file your.cer -keystore your.jks -storepass 第一步的密码
`第一步到第三部可以直接用explorer . 来直接打开文件目录注意有个点.
4.SpringBOOT 配置https
只需要将你的jks文件放入

这里
然后再yml中配置(properties 差不多)

其中key-store-password为第一步你输入的密码
keyAlias为第一步alias后面的单词
keyStoreType为证书扩展名.
这只是对SpringBOOT的Toamcat配置https
5. Android配置https
Android需要第三部制作的cer证书放入asstes文件夹 raw文件也可以
Android采用retrofit2+okhttps3实现的
这里需要需要hongyang大神的HttpsUtils文件
这里我们只需要httpsUtils.java文件其他不需要
hongyang大神GitHUb下载地址
首先在application中初始化sslparams
public class MyApplication extends Application {
public static SharedPreferences sp;
private static DaoSession daoSession;
public static HttpsUtils.SSLParams sslParams;
@Override
public void onCreate() {
super.onCreate();
sp = MySP.getInstance(getApplicationContext()).getSP();
try {
sslParams = HttpsUtils.getSslSocketFactory(new InputStream[]{getAssets().open("baoyuantest.cer")}, null, null);
} catch (IOException e) {
e.printStackTrace();
}
}
}
然后在你的retrofit管理器中使用
private RetrofitManager() {
// 创建 OKHttpClient
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(DEFAULT_TIME_OUT, TimeUnit.SECONDS);//连接超时时间 builder.writeTimeout(DEFAULT_READ_TIME_OUT,TimeUnit.SECONDS);//写操作 超时时间
builder.readTimeout(DEFAULT_READ_TIME_OUT, TimeUnit.SECONDS);//读操作超时时间
// 添加公共参数拦截器
builder.addInterceptor(new CookieResponseInterceptor());
builder.addInterceptor(new CookieRequestInterceptor());
builder.sslSocketFactory(MyApplication.sslParams.sSLSocketFactory, MyApplication.sslParams.trustManager);
//这里主要是 Hostname was not verified 错误因为我是本地测试自制证书没有过审核所以回报这个错误. Ca证书下来之后可以吧这句话干掉.
builder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
// 创建Retrofit
mRetrofit = new Retrofit.Builder()
.client(builder.build())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(ApiConfig.BASE_URL)
.build();
}
这里面有对Hostname was not verified
错误的处理上面代码注释部分
感谢
http://www.jianshu.com/p/40cabafa9411
http://blog.csdn.net/lmj623565791/article/details/48129405
后面会更新阿里云服务器处理的部分