zoukankan      html  css  js  c++  java
  • HTTPS是数据交互细节

    by http://www.zcfy.cc/article/how-does-https-work-1280.html

    密码(Cipher)

    Java 1.2内置了一个叫做"JCE"(Java Crytography Extension)的系统。它主要负责Java内部的密钥和证书的管理。

    众所周知,我们要给一段信息加密或者解密,就必须要有密钥。这就好比开门或者锁门,你得有一把钥匙。

    这个密钥可以用Java带的KeyGenerator 或者 KeyPairGenerator生成。前者用于生成对称密钥,后者用于生成分对称密钥。

    • 对称加密(symmetric cryptography) _ 使用相同的key加密和解密

    • 非对称加密(asymmetric cryptography) — 使用不同的keys加密和解密。keys通常分为公钥和私钥

    公钥也许分布广泛,但是私钥只有它的服务器知道。

    在一个安全的非对称加密方案中,当使用公钥加密一段信息后,只有配对的私钥可以解密这一段信息。因此,即使黑客拿到了公钥加密信息,他也不能解密这一段信息。因为他没有配对的私钥。所以说,使用非对称加密传输的信息是安全的。

    证书(Certificate)

    生活中,假设你要买钻石然后进入了一家钻石店。你怎么能够知道钻石是真的。对于多数人来说,他们没有钻石相关的知识,是很难分辨钻石的真假的。但是,如果这家店有美国政府发布的的钻石营业执照,你就能确定这家店卖的是真的钻石。

    证书在计算机世界好比上面说的营业执照,它可能有另一些密钥——另一个证书(假设是“B”)。这个密钥正是我需要的,而“B”则是证明这个证书是可信赖的凭证。

    你可能会问:我怎么知道“B”是可信的。这是一个好问题。

    Android在手机里内置了将近150份CA(certificate agent 代理证明机构)根证书。他们就好像美国的首席法官(like the chief justice in u.s),在整个世界都是被认可的。

    “B”内置了内另一个证书(C),因此我们会检查“C”是否是可信的。。。查询整条证书链,如果在这条证书链的末端或者根证书,正是我们在手机中内置的150份预设的证书之一,我们就确信原证书是合法的。

    P.S. : 证书有很多格式。

    • “x.509” :x.509 证书通常用于包含公钥。

    • “PKCS12”

    :PKCS12证书同时包含私钥和公钥。因此,PKCS12证书需要密码开启。

    Https

    最后,讲讲“https”部分。之所以前面介绍“密码”和“证书”两部分,是因为HTTPs包含它们。

    HTTPs(HTTP over SSL)被设计用于在互联网中安全通信。

    1. 何如安全通信?

    怎么才能建立安全的通信呢?首先想到的是加密。我给需要传输的数据加密,然后将数据和“加密用的密钥”传给服务器,服务器就能使用这个k密钥解密传输的数据了。 

    让我们想象这样一个场景:黑客拦截了这次通信,这意味着加密用的密钥和加密的数据都被盗取了。如果黑客有密钥,解密这段加密的数据就不是什么难事了。好了,你的数据泄露了。

    2. 非对称加密(Asymmetric Cryptography)如何呢?

    上一个方法一点也不安全,我们考虑下一个,非对称加密有怎么样呢?

    这是一个很棒的想法。你使用服务器提供的公钥加密信息。因为服务器是唯一知道这个与公钥配对的私钥的,这意味着只有服务器能够解密这段加密的信息。这样,即使是黑客拦截了这段消息,它没有配对的私钥,也无法解密这段信息。因此,数据是安全的。

    不足之处就是,非对称加密较对称加密来说,需要花费更长的时间来完成加解密的工作。出于用户体验的考虑,给一大串数据执行非对称加解密,并不是一个理想的方案。

    3. 最终的方案

    先前两个方案都失败了。有没有综合两个方案优势的方案呢?下面这个方案就是你需要的。

    HTTPS :

    上图很清楚的展示了HTTPS的执行加解密的过程

    1. [server] 生成配对的公钥和私钥,我们称它为“Key”和“KeyPri”

    2. [server] 服务器将“KeyPub”传给客户端

    3. [Client] 生成对称秘钥("key2"),然后用key2加密信息

    4. [Client] 使用“KeyPub”加密“key2”。因为只有服务器知道“keyPri”,所以“key2”是安全的

    5. [Client]传递加密后的数据和加密的key给服务器

    6. [Server] 用“KeyPri”解密这个key,拿到“key2”

    7. [Server]用“key2”解密加密后的数据。数据安全的到达来了服务器(Now the data arrieve(?arrive) in Server safely)。

    结论

    因为对称加密比非对称加密快,因此HTTPS使用对称加密给数据加密,使用非对称加密加密对称加密生成的密钥,从而确保数据传输的安全性。使用这种方法,加密就变的即快速又安全了。

    总之,理解HTTPS的工作原理是非常重要。这样在现实工作生活中就可以使用这种思想保证你的数据安全。

  • 相关阅读:
    【转并修改】VS2013 MVC Web项目使用内置的IISExpress支持局域网内部机器(手机、PC)访问、调试
    ASP.NET MVC4 UEditor 的上传图片配置路径
    转:Java图形化界面设计——布局管理器之FlowLayout(流式布局)其他请参考转载出处网址
    转载:win7JDK环境配置
    转载:java保留2位小数
    转载:遍历Map的四种方法
    架构模式: 远程过程调用
    架构模式: 外部配置化
    架构模式: 微服务的基底
    架构模式: 服务部署平台
  • 原文地址:https://www.cnblogs.com/lujun1949/p/5982218.html
Copyright © 2011-2022 走看看