HTTP、HTTPS、SSL总结

HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议:
  它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息,它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的安全全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。
HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。总的来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议要比http协议安全。
  在URL前加https://前缀表明是用SSL加密的,你的电脑与服务器之间收发的信息传输将更加安全。 Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定。
HTTPS 的作用
      它的主要作用可以分为两种:一种是建立一个 信息安全 通道,来保证数据传输的安全;另一种就是确认网站的真实性。
a . 一般意义上的 https ,就是服务器有一个证书。主要目的是保证服务器就是他声称的服务器,这个跟第一点一样; 服务端 和客户端之间的所有 通讯 ,都是加密的。
b. 具体讲,是客户端产生一个对称的 密钥 ,通过服务器的证书来交换密钥,即一般意义上的握手过程。
c. 接下来所有的信息往来就都是加密的。第三方即使截获,也没有任何意义,因为他没有密钥,当然篡改也就没有什么意义了。
d .少许对客户端有要求的情况下,会要求客户端也必须有一个证书。
这里客户端证书,其实就类似表示个人信息的时候,除了用户名 / 密码,还有一个 CA 认证过的身份。因为个人证书一般来说是别人无法模拟的,所有这样能够更深的确认自己的身份。目前少数个人银行的专业版是这种做法,具体证书可能是拿 U 盘(即 U 盾)作为一个备份的载体。
HTTPS解决的问题:
1 . 信任主机的问题.
  采用https 的server 必须从CA 申请一个用于证明服务器用途类型的证书. 改证书只有用于对应的server 的时候,客户度才信任此主机. 所以目前所有的银行系统网站,关键部分应用都是https 的. 客户通过信任该证书,从而信任了该主机. 其实这样做效率很低,但是银行更侧重安全. 这一点对我们没有任何意义,我们的server ,采用的证书不管自己issue 还是从公众的地方issue, 客户端都是自己人,所以我们也就肯定信任该server.
2 . 通讯过程中的数据的泄密和被窜改
   1) 一般意义上的https, 就是 server 有一个证书.
     a) 主要目的是保证server 就是他声称的server. 这个跟第一点一样.
     b) 服务端和客户端之间的所有通讯,都是加密的.
        i. 具体讲,是客户端产生一个对称的密钥,通过server 的证书来交换密钥. 一般意义上的握手过程.
        ii. 所有的信息往来就都是加密的. 第三方即使截获,也没有任何意义.因为他没有密钥. 当然窜改也就没有什么意义了.
   2). 少许对客户端有要求的情况下,会要求客户端也必须有一个证书.
     a) 这里客户端证书,其实就类似表示个人信息的时候,除了用户名/密码, 还有一个CA 认证过的身份. 应为个人证书一般来说别人无法模拟的,所有这样能够更深的确认自己的身份.
     b) 目前少数个人银行的专业版是这种做法,具体证书可能是拿U盘作为一个备份的载体.
3.HTTPS 一定是繁琐的.
   a) 本来简单的http协议,一个get一个response. 由于https 要还密钥和确认加密算法的需要.单握手就需要6/7 个往返.
     i. 任何应用中,过多的round trip 肯定影响性能.
   b) 接下来才是具体的http协议,每一次响应或者请求, 都要求客户端和服务端对会话的内容做加密/解密.
     i. 尽管对称加密/解密效率比较高,可是仍然要消耗过多的CPU,为此有专门的SSL 芯片. 如果CPU 信能比较低的话,肯定会降低性能,从而不能serve 更多的请求.
     ii. 加密后数据量的影响. 所以,才会出现那么多的安全认证提示。
//java访问HTTPS链接
try {
    logger.debug("开始访问HTTPS >>>>>>>> ");
    //创建URL对象
    URL myURL = new URL("https://www.oschina.net/news/83188/2017-april-yuanchuanghui");
    //创建HttpsURLConnection对象,并设置其SSLSocketFactory对象
    HttpsURLConnection httpsConn = (HttpsURLConnection) myURL.openConnection();
    /*
     * 服务器端禁止抓取,返回HTTP 403命令,禁止恶意访问此网站,不能从此网站中抓取内容;我们可以通过设置User-Agent来欺骗服务器
     * http://blog.sina.com.cn/s/blog_65be362c01011ptj.html
     * 不需要登录的情况下:
     * httpsConn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
    */
    //取得该连接的输入流,以读取响应内容
    InputStreamReader isReader = new InputStreamReader(httpsConn.getInputStream());
    //读取服务器的响应内容,并显示
    int respInt = isReader.read();
    while(respInt != -1){
        logger.debug("返回信息:" + respInt + "");
    }
} catch (MalformedURLException e) {
    logger.error("URL格式错误",e);
} catch (IOException e) {
    e.printStackTrace();
}
SSL 简介
1 )简介
SSL (Secure Socket Layer) 为 Netscape 所研发,用以保障在 Internet 上数据传输之安全,利用数据加密 (Encryption) 技术,可确保数据在网络上之传输过程中不会被截取及窃听。它已被广泛地用于 Web 浏览器与服务器之间的身份认证和加密数据传输。 SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。
2 ) SSL 提供的服务
a. 认证用户和服务器,确保数据发送到正确的 客户机 和服务器
b. 加密数据以防止数据中途被窃取
c. 维护数据的完整性,确保数据在传输过程中不被改变。
3) SSL 协议的握手过程
SSL 协议既用到了公钥加密技术又用到了对称加密技术,对称加密技术虽然比公钥加密技术的速度快,可是公钥加密技术提供了更好的身份认证技术。 SSL 的握手协议非常有效的让客户和服务器之间完成相互之间的身份认证,其主要过程如下:
① 客户端的浏览器向服务器传送客户端 SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。
② 服务器向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。
③ 客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的 “ 发行者的数字签名 ” ,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。
④ 用户端随机产生一个用于后面通讯的 “ 对称密码 ” ,然后用服务器的公钥(服务器的公钥从步骤 ② 中的服务器的证书中获得)对其加密,然后传给服务器。
⑤ 服务器用私钥解密 “ 对称密码 ”( 此处的公钥和私钥是相互关联的,公钥加密的数据只能用私钥解密,私钥只在服务器端保留。详细请参看:   http://zh.wikipedia.org/wiki/RSA%E7%AE%97%E6%B3%95 ) ,然后用其作为服务器和客户端的 “ 通话密码 ” 加解密通讯。同时在 SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。
⑥ 客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤 ⑤ 中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。
⑦ 服务器向客户端发出信息,指明后面的数据通讯将使用的步骤 ⑤ 中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。
⑧ SSL 的握手部分结束, SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。

HTTPS协议与web服务器交互时的交互过程:
客户端请求SSL连接,并将自己支持的加密规则发给网站。服务器端将自己的身份信息以证书形式发回给客户端。证书里面包含了网站地址,加密公钥,以及证书的颁发机构。
获得证书后,客户要做以下工作:
1)验证证书合法性
2)如果证书受信任,客户端会生成一串随机数的密码,并用证书提供的公钥进行加密。
3)将加密好的随机数发给服务器。
获得到客户端发的加密了的随机数之后,服务器用自己的私钥进行解密,得到这个随机数,把这个随机数作为对称加密的密钥。
之后服务器与客户之间就可以用随机数对各自的信息进行加密,解密。
注意的是:证书是一个公钥,这个公钥是进行加密用的。而私钥是进行解密用的。公钥任何都知道,私钥只有自己知道。这是非对称加密。而对称加密就是钥匙只有一把,我们都知道。之所以用到对称加密,是因为对称加密的速度更快。而非对称加密的可靠性更高。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值