自签名SSL证书的生成

“接口调通了” “业务逻辑完成了”。 但是你的数据是不是在裸奔呢。

虽然互联网上大部分的数据都是在裸奔。但是想想自己家的数据在互联网上裸奔 是不是很别扭。

要想不让数据裸奔有几个基本的要求:要改用https请求,要进行数据加密  要进行ssl身份验证。

简单说一下ssl:

SSL 证书遵守 SSL协议,通过在客户端浏览器和Web服务器之间建立一条SSL安全通道 
一个有效、可信的 SSL 数字证书包括一个公共密钥和一个私用密钥。公共密钥用于加密信息,私用密钥用于解译加密的信息。因此,浏览器指向一个安全域时,SSL 将同步确认服务器和客户端,并创建一种加密方式和一个唯一的会话密钥。它们可以启动一个保证消息的隐私性和完整性的安全会话。

1. 如何使用JDK自签名SSL证书

  1. 下载jdk,并且配置环境变量。
  2.  生成客户端keystore。
     
    keytool -genkeypair -alias client -keyalg RSA -validity 3650 -keypass 123456 -storepass 123456 -keystore client.jks
    

     

  3. 生成服务端keystore
     
    keytool -genkeypair -alias server -keyalg RSA -validity 3650 -keypass 123456 -storepass 123456 -keystore server.keystore
    

     

  4.  导出客户端证书
     
    keytool -export -alias client -file client.cer -keystore client.jks -storepass 123456 
    

     

  5.  导出服务端证书
     
    keytool -export -alias server -file server.cer -keystore server.keystore -storepass 123456 
    

     

  6.  证书互换
     
        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 
    
  7.  转换andoird能识别的 BKS 文件
     

    下载链接:https://sourceforge.net/projects/portecle/
     运行protecle.jar将client.jks和truststore.jks分别转换成client.bks和truststore.bks,然后放到android客户端的assert目录下。

  8.  在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
        }
    }

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值