http和https的学习记录

一:http

   http是建立在TCP协议基础上的应用层面向连接的协议,http协议分为请求行,请求头,请求体。其中请求行包括了请求的方法,       请求的url,请求的协议以及版本,请求头中含有若干个属性,比如:

   Accept :Accept”报文头属性告诉服务端 客户端接受什么类型的响应

   Cookie :  客户端的Cookie就是通过这个报文头属性传给服务端的,   

   Cache-Control : 对缓存进行控制,如一个请求希望响应返回的内容在客户端要被缓存一年,或不希望被缓存就可以通过这个报文头达到目的

    请求体则就是我们请求服务器需要的数据。

   1.2 TCP协议是一种无状态,无连接的传输层面向连接协议,与之对应的是UDP协议,之所以说它是无状态,无连接,是因为它对           上一次处理的事物没有记忆功能,每一次都要重新请求连接,数据传输完后再断开连接。TCP请求连接会经历过3次握手过               程,第一次客户端向服务端发送syn包(seq),告诉服务端端口号,服务端收到后向客户端发送一个syn包,告诉客户端我已             经  收到了,可以发送数据了,客户端收到syn包后向服务端发送一个ACK,这个ACK则是告诉服务端syn包收到,服务器可以             发送数据了,经历过这三次握手后,连接变建立起来了

二:https

     https协议是由ssl+http协议构建的可进行数据加密传输和身份认证的网络协议,要比http安全,那么它的安全性是由ssl来完成,利用了对称加密和非对称加密相结合来完成了加密认证过程。服务端向客户端发送证书和非对称加密中的公钥给客户端,客户端利用公钥加密一个在客户端生成的对称加密中密钥,然后把这个用公钥加密过的密钥发送给服务端,服务端用私钥对这个密钥进行解密,拿到客户端的密钥,然后客户端和服务端就可以用这个密钥进行加密数据传输。

/**
     * 设置ihttps证书验证
     */
    private void setCertificates(Context context) {
        try {
            //将ca证书导入输入流
            InputStream inputStream = context.getResources().openRawResource(R.raw.aaa);

            //keystore添加证书内容和密码
            KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            keyStore.load(inputStream, CLIENT_KET_PASSWORD.toCharArray());

            //证书工厂类,生成证书
            CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
            //生成证书,添加别名
            keyStore.setCertificateEntry("test1", certificateFactory.generateCertificate(inputStream));

            //信任管理器工厂
            TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            trustManagerFactory.init(keyStore);

            //构建一个ssl上下文,加入ca证书格式,与后台保持一致
            SSLContext sslContext = SSLContext.getInstance("TLS");
            //参数,添加受信任证书和生成随机数
            sslContext.init(null, trustManagerFactory.getTrustManagers(), new SecureRandom());

            //获得scoket工厂
            SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
            mOkHttpClient.sslSocketFactory(sslSocketFactory);

            //设置ip授权认证:如果已经安装该证书,可以不设置,否则需要设置
            mOkHttpClient.hostnameVerifier(new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            });
            inputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    

                                             

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值