47 评论

扫盲 HTTPS 和 SSL/TLS 协议[0]:引子

不见图 请翻墙

  今天这篇算是补之前的欠债——俺在4年前写过几篇关于 CA 证书的扫盲(“这里”和“这里”),之后有不止一位热心读者建议俺写一篇关于 HTTPS 的扫盲。因为俺比较懒,当时没动笔,一拖就是两三年,都有点忘了。正好今年出了两个跟 HTTPS 相关的高危漏洞(HeartbleedPODDLE),于是俺又想起这事儿。
  本来想单独写一篇。等写完“背景知识”这一章节,发现篇幅已经很长了。所以就再开一个系列吧。

  事先声明:
  既然叫做“扫盲”,所以俺尽量避免讲太多的“技术实现细节”(当然,更不会去讲“代码实现”)。本系列侧重于:尽可能通俗地介绍“设计思路”、“实现原理”,最后再聊聊“针对 HTTPS 的攻击手法”和“相关的安全防范措施”。一开始计划写3~4篇,后来篇幅有点失控,估计要写7~8篇。
  虽然是扫盲,或许也能让 IT 技术人员从中获益——因为俺发现:连安全行业的某些程序员,对 HTTPS 的原理也所知甚少。

为了方便阅读,把本系列帖子的目录整理如下(需翻墙):
1. 背景知识、协议的需求、设计的难点
2. 可靠密钥交换的难点,以及身份认证的必要性
3. 扫盲几种密钥交换(密钥协商)算法
4. 历史版本的演变及 Record 协议的细节
5. 握手过程的细节
6. 针对 HTTPS 的各种攻击手法
7. 各种相应的防范措施


俺博客上,和本文相关的帖子(需翻墙)
计算机网络通讯的【系统性】扫盲——从“基本概念”到“OSI 模型”
扫盲 DNS 原理,兼谈“域名劫持”和“域名欺骗/域名污染”
对比4种强化域名安全的协议——DNSSEC,DNSCrypt,DNS over TLS,DNS over HTTPS
如何隐藏你的踪迹,避免跨省追捕》(系列)
扫盲 netcat(网猫)的 N 种用法——从“网络诊断”到“系统入侵”
如何让【不支持】代理的网络软件,通过代理进行联网(不同平台的 N 种方法)
版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者编程随想和本文原始地址:
https://program-think.blogspot.com/2014/11/https-ssl-tls-0.html

47 条评论

  1. 回复
    1. to:v499
      能不能去看看博客界面升级——重新实现【全站搜索】,比 Google 更准确地搜索评论 18楼 14单元和18单元,因为谷歌误判顺序反了,您先看18单元,谢谢

      删除
    2. 人气真高,顶

      删除
  2. vpngate显示连接上了,但是浏览器察看ip还是自己的ip,上不去国外网站。还有这种事让我怎么放心用啊

    回复删除
    回复
    1. vpagate有时不稳定,所以连接上以后我都要看自己IP有没有变。你说的还是自己的IP,其实是没有连接上。

      删除
    2. TO 678
      同意 1单元 的解释——你这种情况多半是 VPN 压根儿没有联上(或者已经断开)

      保险的做法是:VPN + TOR(双重代理)
      如果 TOR 能联上,说明 VPN 已经联上。

      关于“双重代理”的教程,请参见《[url=http://program-think.blogspot.com/2010/04/howto-cover-your-tracks-0.html]如何隐藏你的踪迹,避免跨省追捕[/url]》

      删除
    3. 我觉得双重代理很好,只要tor连上,vpngate连接的的成功率会大大增加,不过有时tor会显示连接超时,麻烦问下编程兄如何解决,我的tor还是老版本的,是不是换了新版的会好些呢

      删除
    4. TO 3单元的网友
      你提到说:
      “只要tor连上,vpngate连接的的成功率会大大增加”

      你是不是说反了?

      另外,TOR Browser 软件包已经出到 4.0 版本。用它内置的 meek 插件,可以独立联网。
      具体教程请看《[url=http://program-think.blogspot.com/2014/10/gfw-tor-meek.html]“如何翻墙”系列:TOR 已复活——meek 流量混淆插件的安装、优化、原理[/url]》

      删除
  3. 博客界面升级——重新实现【全站搜索】,比 Google 更准确地搜索评论 14楼18楼顺序反了,这样的话从解决问题的顺序上就错了,14楼的解决方法不知道编程和v443感觉怎么样,能不能帮着解决一下,因为socks单代理不好找,解决这个问题可能会帮助很多人,谢谢了

    回复删除
    回复
    1. 是18楼 14单元和18单元顺序反了,我说错了在此补充

      删除
    2. TO 678
      待会儿俺去回复前一篇博文的留言。

      删除
  4. to:编程随想
    能到"每周转载:党国红人周小平惨遭围观——网友称:请不要辜负这个傻逼"能不能回复一下21楼,因为netsh的socks端口转发在虚拟机隐藏中不能连接不是个例,在1年前我问过此问题但是只是解决tor的socks问题几乎看明白标题的人都不能直接连接,是有个博友找到设置torrc文件的办法解决的,但是现在要解决赛风socks就不行了,因为赛风没有设置文件啊,如果没有解决的方法我就放弃了,老是认为能解决可是到最后解决不了的问题实在难受

    rinetd按您的方法设置后cmd提示不是内部命令,麻烦您别凭自己的经验看这个问题,而是根据您的博文设置一下,看看哪里遗漏了,麻烦补上,因为看您博文的大多都是小白,既然是扫盲还是详细些才能起到效果

    回复删除
    回复
    1. TO 678
      关于 netsh 进行端口转发
      这种方式确实存在兼容性的问题。
      比如有的读者反馈说——在精简版的 Win7 上没法用。

      兼容性比较好的是 rinetd——因为这个工具本身就是跨平台的(Windows 和 Linux),所以不会太依赖 Windows 本身的一些特性。
      你碰到的错误提示——“rinetd 不是内部命令”
      这是因为你没有正确地切换目录。
      刚才俺已经在
      《[url=http://program-think.blogspot.com/2013/01/cross-host-use-gfw-tool.html]多台电脑如何共享翻墙通道[/url]》
      加了一些补充说明,你去看一下。
      如果还是看不明白,俺再继续补充。

      老实说,切换目录是命令行操作最基本的技能。
      如果你稍微懂一丁点命令行操作,应该都不会碰到此问题了

      删除
    2. TO 编程随想
      直接 drag-n-drop rinetd 进cmd不行吗?

      删除
    3. 已经对socks在虚拟机中的转发不抱什么希望了,但是本着负责任的态度在此分享我的实验结果
      主机rinetd 转发赛风 8080 端口10000 成功
      主机rinetd 转发赛风 1080 端口10000 失败(主机中可以)
      主机rinetd 转发tor 9050 端口10000 失败(主机中可以)

      删除
    4. 我觉得与兼容性应该没关系,因为和netsh结果完全一致

      删除
    5. 都说了是DNS问题...
      虚拟机不知道目标网站的IP...自然上不了,
      不信? 试试以 IP 为网址
      Firefox用远端DNS就可以了...

      删除
    6. sc32还有其他类似软件,有远程解析dns选项,也有本地解析。远程桌面连接就是ip阿tor可以,赛风不可以

      删除
    7. 重新说一下测试结果
      tor在虚拟机中经过端口转发,直接输入ip可以访问
      问题:既然是端口转发,那么转发的数据应该转回主机处理才对,为什么主机中直接在浏览器中设置可以在虚拟机中就不可以

      关键问题:同样的socks协议为什么tor可以在主机和虚拟机中连接(远程桌面连接) 赛风确不可以呢?这个才是我真正要解决
      的问题

      删除
    8. TO v499
      俺还真没用过你说的这招——把某个 exe 直接拖拽到 cmd 窗口。

      因为俺很早就习惯用命令行的方式,经常用 cmd 进行各种操作。
      所以都是先用 cd 切换目录,然后运行(非系统目录下的) exe

      删除
    9. TO 678
      如果你用 rinetd 和 netsh 进行端口转发,效果相同。
      那么就可以排除 netsh 兼容性的问题。

      有可能是赛风对 SOCKS 的实现有问题。
      (俺没看过 赛风 的源代码,只是猜测)

      删除
    10. to:编程随想
      您能帮忙看看赛风是什么原因通过sc32及类似工具,不能调用远程桌面的原因吗?能解决最好,因为tor太慢了。虽然tor很安全

      删除
  5. nginx配置tls后,浏览器上显示“连接使用rc4-128进行加密的”。据说使用rc4-128不太安全,求教应该怎么换成aes-256加密?

    回复删除
    回复
    1. 看此: http://blog.rlove.org/2013/12/strong-ssl-crypto.html
      其实目前最好的应是: AES-256-GCM, 但mozilla的NSS只支援到aes128-gcm, 但都可以了~
      另外别启动/SSLv3, 有POODLE...



      删除
    2. TO v499
      多谢替俺回答问题 :)

      关于 SSL v3 的漏洞,前2月刚曝光的。
      据说从 Firefox 34 版本开始,会把 SSL v3 的选项禁掉

      删除
  6. 其实在主机中使用vpngate来调用远程桌面是无奈的选择,虽然vpngate前置+tor的组的很犀利,但是对于墙内大多数同学来说是一种美好的折磨,所以忍痛寻找到赛风这个家伙,因为单独使用vpngate有时会出现假连接现象,这个太无语了。没想到赛风出现奇怪现象socks+sc32连不到远程桌面,tor却可以。再前面的博文18楼讨论了,可也没结果,心中不解。官方好像说赛风是开源的,麻烦编程君能不能研究下到底能不能解决?

    回复删除
    回复
    1. 因为单独使用vpngate有时会出现假连接现象,这个太无语了。

      这个的确是个问题,我也遭遇过。

      删除
    2. TO 678
      或许可以换一个思路,用 TOR 直连。然后其它软件走 TOR 内置的 SOCKS 代理。

      近期 TOR Browser 软件包升级到 4.0 版本之后,已经能够直接联网。
      请参见《[url=http://program-think.blogspot.com/2014/10/gfw-tor-meek.html]TOR 已复活——meek 流量混淆插件的安装、优化、原理[/url]》

      如此一来,既避开了 赛风 的奇怪问题,也避开了 VPNgate 断线导致的“公网IP暴露”

      删除
  7. 关于https的文章我之前也在博客中写过。

    回复删除
    回复
    1. TO 枫之落叶
      原来你也写过这个话题 :)
      那可否对本系列提点意见?

      删除
  8. 博客 大概什么时候还会推出一个版本 ,以包含最新的博客全部内容?

    回复删除
    回复
    1. TO 小明
      本博客的打包下载,前一个版本是10月初发布的。
      或许到下月初,俺再出一个版本放到网盘上。

      因为博客的内容越来越多,打包文件已经超过100兆。
      所以俺稍微把更新周期拉长了。

      删除
  9. pozhu,第3 4 5 篇文章呢?找不到链接?

    回复删除
    回复
    1. 博主只写了个标题,还没写博文所以还没有链接

      删除
  10. 这个系列很赞,相比您的政治博文,我更喜欢您的技术博文,通俗易懂,又不失专业。期待此系列的后续,支持编程随想

    回复删除
  11. 哥,您的下边怎么没了?

    回复删除
  12. 老大,啥时候把3、4、5部分的介绍补上啊?很期待啊!

    回复删除
  13. http://www.techug.com/https-ssl-tls
    老大,有人盗用你的文章啊。

    回复删除
  14. 关于3、4、5剩下的部分,如果您没时间写的话,能不能给我们推荐下应该怎么学习呢,有没有推荐的参考书之类的。

    回复删除
  15. 大神,我最近在学习https相关知识,整理个博客记述https以及在iOS开发中的用法以便加深自己的理解,大量引(chao)用(xi)你的博客内容。希望得到大神允许,如果允许就在简书发出来

    回复删除
    回复
    1. 不用大神允许就能引用,请留意文章下方的版权声明。

      删除
  16. 翻了好久,原来大哥你真的没写这个系列的4,5,6。。。催更。。。

    回复删除
  17. 前些日子github被中间人攻击,博主是时候填这系列的坑了

    回复删除
  18. 催更!催更!!催更!!!

    回复删除