zoukankan      html  css  js  c++  java
  • https详解(迁移)

    http+ssl = https

    ssl(Secure Sockets Layer):安全套接层,HTTPS的安全基于SSL

    http:数据以明文传输,不安全

    https:数据加密后传输,且对服务器进行验证,即当前服务器是不是可以被信任

    通俗解释:

    A和B发送消息要进行加密,但密钥总是一方生成,传给另一方;

    这就存在中间人攻击的问题;只要有传这个动作,这个问题就永远不会被解决,永远可以被拦截

    所以从客户端的角度,永远不知道对方是真的服务器还是假的

    那么,现在出现了一个权威机构,权威机构给服务器发一个证书,这个证书就代表了服务器的真实性

    而权威机构派人入驻客户端,可以检查出这个证是真的还是假的,这样问题就解决了

    因为中间人只能造出假证,会被一眼识破

    问题就解决了


    具体实现:

    服务器先向CA申请证书,需要把自己的公钥传给CA,之后会放在证书中

    证书主要包含:

    证书所有人的公开密钥(即服务器的公钥)

    证书发行者对证书的签名(即CA用自己的私钥对发行的证书的签名)

    证书所使用的签名算法

    证书的发行机构的信息

    证书所有人的信息

    1.客户端发起https请求,连接到服务器的443端口

    2.服务器将自己的证书发送给客户端

    3.客户端收到后,①用浏览器内置的证书发行者的公钥对证书签名验签,来验证证书的合法性;②如果合法,则取出服务器的公钥;客户端生成对称密钥,用服务器的公钥对其加密,发送给服务器

    4.服务器收到后,用自己的私钥解密,取出对称密钥

    之后客户端和服务器则用此密钥对传输的信息加密

    优点:

    防止了中间人攻击,即始终无法拿到服务器的公钥,更不用说用公钥加密的对称密钥了

    CA是负责签发证书、认证证书、管理已颁发证书的机关;并不是一个,而是一类

    申请证书的公司

    申请的证书类型不同,价格不同,多域名型SSL证书、通配符(泛域名)SSL证书,企业型OVSSL和增强型EVSSL证书的费用相对来说较高

    CA公司

    要进入各个浏览器的根证书列表,CA公司每年必须过 WebTrust 年度审计,是很大的开销

    CA链费用:新开的CA公司要等5-10年,才会被普遍信任,才能广泛进入根证书链。要想加快点,就得给别的大牌CA公司掏钱,买次级证书

    要具备发放可信SSL证书的资质,这本身就是一个很大的成本

    (来自百度)

    关键点:发行证书的机构的公钥能够轻易获得,如果能的话,中间人就可以拦截证书进而取出服务器公钥;答案是不能,‘这些厂商跟浏览器和操作系统都有合作,它们的根公钥都默认装到了浏览器或者操作系统环境里,且设置了权限’

    根证书与证书链:

    就像是交通主管部门与驾校,我们拿到的驾照是由驾校授权的,而驾校是由主管部门授权的,这样就使得我们的驾照被国家承认

    根证书就相当于主管部门,CA就相当于驾校,当然了驾校可能有多级授权,这样就产生了证书链

    而证书链的顶端就是根证书,根证书是一份特殊的证书,它的签发者是它本身

    根证书被内置在浏览器/操作系统中

    拿到根证书就可以一层一层的拨开洋葱,最终拿到服务器的公钥

    当然CA证书也是可以自签的,就是可以自己做一个证书出来;但没人认可

    除非添加进去后,手动设置为被信任

    像之前的12306证书就相当于自己做的证书,而非CA签发的证书

    fiddler原理

    中间人攻击

    与客户端:使用自己的证书与客户端建立连接,所传输的是自己的证书,使用的也是自己的公钥

    与服务器:扮演客户端的角色

    关键:

    第3步后获取到服务器公钥

    第5步获取到对称加密的密钥

    关键点在于必须要能获取到服务器的公钥,因为即使与客户端间使用的自己的公钥,但第6步必须用服务器的公钥加密

    怎么获取到服务器公钥的?

    因为有证书链的存在,所以只能是内置了各个根证书

    ---------update----------

    android 7.0

    7.0之后无法手动安装证书到系统中了,所以https都抓不到

    root装证书

    ssl pinning

    为了防止中间人攻击,直接将证书打包进客户端,客户端在建立连接时与服务器返回的证书进行比较;

    即只信任自家的证书,其他的证书一致不认

    这与仅有https是不同的,之前是可以手动安装中间人证书且信任,而客户端对所有证书都是不排斥的,而这也是问题所在

    hook

    检测hook,暂未遇到

    (ps:有些内容来源于网络,不保证绝对正确,但相对合理)

  • 相关阅读:
    java nb
    hdu5293(2015多校1)--Tree chain problem(树状dp)
    点击交互的四种处理
    Java实现二维码技术探讨。
    折腾开源WRT的AC无线路由之路-1
    C语言及程序设计[套餐]课程主页
    09_Android中ContentProvider和Sqllite混合操作,一个项目调用另外一个项目的ContentProvider
    C语言打印字母金字塔(第一行是A 第二行是ABA ……)
    成员函数的const究竟修饰的是谁
    linux pdb调试总结
  • 原文地址:https://www.cnblogs.com/justaman/p/11385627.html
Copyright © 2011-2022 走看看