美文网首页
Android HTTPs 超简单实现(包含纸自制证书)

Android HTTPs 超简单实现(包含纸自制证书)

作者: 舒官人 | 来源:发表于2017-09-09 16:05 被阅读0次

生成https证书(单向验证)

@(JAVAWEB)

1. 首先生成jks文件

window下直接cmd

命令 keytool -genkey -keysize 2048 -keyalg RSA -alias tomcat -keystore yourkeystore.jks

yourkeystore.jks改为你想要的名字

cmd

注意:

  1. 其中您的名字与姓氏最好填你的域名地址,如果是本地测试填localhost(就是localhost不是你的IP)

  2. 双字母国家和地区在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文件放入

SpringBOOT目录结构

这里

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

yml配置

其中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

后面会更新阿里云服务器处理的部分

相关文章

网友评论

      本文标题:Android HTTPs 超简单实现(包含纸自制证书)

      本文链接:https://www.haomeiwen.com/subject/zizojxtx.html