#123 转载:SSL, SSH, OpenSSH, OpenSSL 有什么区别

2016-01-30

我仔细阅读原文,然后按照理解对原文做了重新整理。

  1. SSL 是通讯链路的附加层。可以包含很多协议。HTTPS, FTPS, .....

SSL 是一种国际标准的加密及身份认证通信协议,您用的浏览器就支持此协议。
SSL(Secure Sockets Layer)最初是由美国 Netscape 公司研究出来的,后来成为了 Internet 网上安全通讯与交易的标准。
SSL 协议使用通讯双方的客户证书以及 CA 根证书,允许客户/服务器应用以一种不能被偷听的方式通讯,在通讯双方间建立起了一条安全的、可信任的通讯通道。
它具备以下基本特征:信息保密性、信息完整性、相互鉴定。 主要用于提高应用程序之间数据的安全系数。
SSL 协议的整个概念可以被总结为:一个保证任何安装了安全套接字的客户和服务器间事务安全的协议,它涉及所有TC/IP应用程序。

  1. SSH 只是加密的 Shell,最初是用来替代 telnet 的。通过 port forward,也可以让其他协议通过 SSH 的隧道而起到加密的效果。

SSH 的英文全称是 Secure SHell。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止 DNS 和 IP 欺骗。
还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。
SSH 有很多功能,它既可以代替 telnet,又可以为 ftp、pop、甚至 ppp 提供一个安全的“通道”。
SSH 是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x 和 2.x。用 SSH 2.x 的客户程序是不能连接到 SSH 1.x 的服务程序上去的。OpenSSH 2.x 同时支持 SSH 1.x 和 2.x。

SSH 的安全验证是如何工作的从客户端来看,SSH 提供两种级别的安全验证。

  1. 第一种级别(基于口令的安全验证)只要你知道自己帐号和口令,就可以登录到远程主机。
    所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
  2. 第二种级别(基于密匙的安全验证)需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。
    如果你要连接到 SSH 服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。
    服务器收到请求之后,先在你在该服务器的家目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。
    如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。
    客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
    用这种方式,你必须知道自己密匙的口令。

与第一种级别相比,第二种级别不需要在网络上传送口令。
第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。
但是整个登录的过程可能需要10秒。

  1. OpenSSL 一个 C 语言函数库,是对 SSL 协议的实现。
    OpenSSL 很优秀,所以很多涉及到数据加密、传输加密的地方都会使用 OpenSSL 的库来做。

  2. OpenSSH 是对 SSH 协议的实现。

OpenSSH 利用 OpenSSL 提供的库。OpenSSL 中也有个叫做 openssl 的工具,是 OpenSSL 中的库的命令行接口。
从编译依赖上看,OpenSSH 依赖于 OpenSSL,没有 OpenSSL 的话 OpenSSH 就编译不过去,也运行不了。

  1. HTTPS 可以使用 TLS 或者 SSL 协议,而 OpenSSL 是 TLS、SSL 协议的开源实现,提供开发库和命令行程序。

可以理解成所有的 HTTPS 都使用了 OpenSSL。

脚本

# 查看使用了 libssl 库的程序
sudo grep -l "libssl" /proc/*/maps | tr -cd 0-9\\n | xargs -r ps u

References

  • http://en.wikipedia.org/wiki/Secure_Shell
  • http://baike.baidu.com/view/16147.htm
  • http://www.zhihu.com/question/23341334

#117 Python 常见后缀

2016-01-21

.gitignore 常见的 *.py[cod]

参考 gitignore.io

  • .py
  • .pyc 编译过后生成的字节码文件
  • .pyo 经过优化的字节码文件。Python2 时代常见,Python3 不再使用。现在是 .opt-1.pyc, opt-2.pyc
    PS:关于这个优化到底是做什么以后再好好研究。
  • .pyd
  • .pyi Python Stub 文件,IDE 中为了提供更好的提示会带一些这样的文件,只是所有方法都是空的。
    ps: 现在的 PyCharm 好像带的 stub 文件都是 py 后缀了。
  • .pyw Windows 专供,py 文件由 python.exe 解析,pyw 文件由 pythonw.exe 执行
    他们不同之处就是,python.exe 会导致一个命令行窗口的出现,而,pythonw.exe 不会,所以常用在 GUI 程序上。
  • .pth 自定义路径导入规则的文件,参考:.pth 文件和 site 模块

#116 bc 计算器

2016-01-18

可能这是 Linux 命令行使用频率最高的一个计算器工具了。

其语法可以说比较复杂,可以定义变量,有各种逻辑控制语句,甚至可以定义函数,简直可以拿来做程序设计了。但是我们一般可能用不了这么多功能,就用来做一些简单计算就行。

PS:奇怪的是,有这么多复杂的功能,竟然没有包含位运算。

bc <<< "1 + 3 + 5 + 7 + 9"
26

bc <<< "scale=3; 1 / 3"
.333

bc <<< "obase=2; 14"
1110

bc <<< "ibase=16;obase=2; FF - 1A"
11100101

#115 Shell:长字符串切割成数组

2016-01-16
long_string="line 1
line 2
line 3"

# bash ========
# readarray -t lines <<< "$long_string"
# IFS=$'\n' lines=($long_string)

# zsh =========
# lines=("${(@f)long_string}")
setopt sh_word_split

for line in "${lines[@]}"
do
    echo "$line =="
done

#114 魔戒的世界

2016-01-15

托尔金

世界观

  1. 一神教的世界观,整个世界仿佛是上帝的一个沙盘游戏。
  2. 远古的历史是精灵族的视角记录下来的。甚至是一种口口相传的故事的感觉在描述,有存在冲突的地方。

这里的上帝叫做一如 Eru,或者伊露维塔 Ilúvitar。
一如在虚空中创建了时空(一亚),又在这个时空中创建了一个平面的世界阿尔达(天如穹庐,笼盖四野)。
帮助一如创世的是埃努,一如的意识,他们通过音乐(埃努的大乐章)来创造世界。
有一个是例外,一如独立创造了精灵和人类,给精灵的礼物是真善美,给人类的礼物是死亡。

理解:精灵死后灵魂进入曼督斯殿堂(可能重生),“被困在阿尔达里”,最后和阿尔达一同衰亡,人类“可以离开阿尔达”,获得自由(??)。

为了继续完善这个世界,照顾好神的孩子,部分埃努离开一如,进入了阿尔达,其中力量强大的叫做维拉 (女性维拉也被称为维丽 Valier),有 15 位,普通的叫迈雅,数量比较多(包括神犬胡安和巨鹰)。
部分埃努黑化,其中包括维拉米尔寇 Melkor(后来叫做魔苟斯 Morgoth(黑暗暴君)),迈雅索伦(魔苟斯的仆人)。

阿尔达

霍比特人,魔戒,精灵宝钻发生的时间都比较晚,主要发生在中土大陆。

第二纪元,阿门洲被剥离出来,剩下的阿尔达被卷曲成了一个球形。无法直接从中洲走到阿门洲。

远古

魔王一直给埃努捣乱,破坏了给整个世界带来光明的两盏巨灯。
埃努就囚禁了魔王,又在阿门洲创造了两棵巨树能照亮阿门洲的部分区域。
等精灵苏醒过来之后,带绝大部分精灵穿越大海,从中土来到阿门洲。

结果后来部分精灵被魔王蛊惑,对埃努心生不满,甚至产生内乱,离开阿门洲,返回中州。
埃努就开始不再干涉中洲的事情。

生物

中土世界的五个迈雅,有两位去了东方,在故事中没有出现,剩下三个:白袍巫师萨鲁曼,灰袍巫师甘道夫,褐袍巫师。

除了精灵和人类,其他的智慧生物:

  1. 矮人(Dwarves)由维拉奥力(大地之神)创造
  2. 霍比特人 Hobbits 是人类分支
  3. 半兽人 Goblin,又叫奥克 Orcs,是魔王用精灵和人类培育出来的黑暗生物。
  4. 安格玛巫王 Witch-King of Angmar,就是戒灵,也就是被索伦控制的人类持戒者(曾经是人类)。
    在北面建立的安格玛王国,统治黑暗人类,半兽人,或其他黑暗生物。
  5. 恩特 Ents,树人,维拉雅凡娜创造,保护森林。
  6. 食人妖,魔王创造。
  7. 恶龙 Dragons,魔王创造。
  8. 恶狼 Wolves,黑暗生物。被当做坐骑的恶狼也叫座狼 Wargs。
  9. 巨型蜘蛛 Spiders,黑暗生物。远古恶灵乌苟立安特的后裔。乌苟立安特和魔王一起毁掉了圣树。

精灵宝钻 The Silmarillion

  1. 埃努的大乐章 The Ainulindale
  2. 维拉本纪 The Valaquenta
  3. 精灵宝钻争战史 The Quenta Silmarillion
  4. 努曼诺尔沦亡史 The Akallabeth
  5. 魔戒及第三纪元 Of the Rings of Power and the Third Age

霍比特人

  1. 意外之旅
  2. 史矛革之战
  3. 五军之战

魔戒、指环王

  1. 护戒同盟队
  2. 双塔奇兵
  3. 王者归来

地图

https://en.wikipedia.org/wiki/Middle-earth

  • 双灯纪元地图

  • 双树纪元地图

  • 贝尔兰的沉没(Beleriand):维拉对魔苟斯发起愤怒之战,导致地理结构发生重大破坏。

  • 和我们这个世界的映射,大概对应欧亚大陆

维拉并没有彻底离开阿尔达,而是主动退出直接统治与军事干预,将世界治理权交还历史进程。

时间线

  • 巨灯纪元,创世,神界一战,创造两盏巨灯,被毁,埃努移居阿门洲,创造巨树。
  • 巨树纪元,精灵文明,发生在阿门洲的故事,精灵宝钻打造出来,神树被毁,精灵族内乱,部分精灵返回中洲,创造太阳月亮。
  • 第一纪元,人类苏醒,最后埃努打败魔王。
  • 第二纪元,索伦崛起,创造了 20 个力量之戒(包括至尊魔戒 The One Ring),最后被人类精灵联军打败,戒指被人王拿走(索伦肉身被毁,但因戒指未灭而保留复活能力)。

    Notes: 在第二纪元发生了一个事件导致世界从平面被弯曲成球形:
    由于第一纪元人类协助精灵对抗魔苟斯,战后,维拉在大海中升起一座岛屿努门诺尔(Númenor)。岛上的人寿命可以达到 300~400 岁,拥有各种高科技,可以说属于超级人类。
    第二纪元,索伦被努门诺尔军队击败并俘虏。然后索伦成功腐化努门诺尔,导致努门诺尔国王阿尔-法拉宗组织庞大舰队进攻阿门洲,企图获得永生。
    一如(Eru Ilúvatar)亲自干预,努门诺尔沉没,国王与军队被埋葬,世界被改造成“弯曲世界”,阿门洲被移出凡人可达空间。
    说明:其中少数努门诺尔人忠诚于维拉,逃离了努门诺尔,在埃兰迪尔(Elendil)的领导下在中州建立亚尔诺与刚铎联合王国。

  • 第三纪元,《霍比特人》与《魔戒》的故事,魔戒由 Bilbo Baggins 获得,后传给 Frodo Baggins,最后丢入末日火山,索伦和魔戒一同被彻底消灭。故事结束之后,精灵离去,魔法与神话色彩逐渐退场。

  • 第四纪元,神话时代终结之后,人类重建大陆秩序。

参考资料与拓展阅读