SSL/OPENSSL笔记

来源:互联网 发布:网络奇兵武器 编辑:程序博客网 时间:2024/05/07 00:42

SSL&OPENSSL

如果访问某宝,细心的朋友会发现,该网站已经从 http协议转变成了https协议。

http一直是明文传输了,对于某宝这样体量的网站,会遇到哪些问题呢? 为什么某宝需要从http协议更改成https呢?

举个栗子:

运营商劫持

用户在某宝网搜索羽绒服,发起请求之后,网站根据内部核心的算法和数据推算,向用户返回返回网站认为现在最好的top40个羽绒服的时候,一些地方的运营商,可以截获某宝的http包,然后篡改其内容。比如:插入4件质量低下的羽绒服置顶。 这是一个很恐怖的事情,相当于直接改变了某宝的排序规则,很多不法商家在退货率极高,次品率极高的情况下,能直接联系运营商,强行展示在用户面前。这不仅伤害了网站运营者,也直接伤害了用户的购买体验。

如果切换成https协议,那么这类事件将不会发生。

https协议是在http协议的基础上增加了ssl层。

SSL&TLS

SSL(Secure Sockets Layer)即安全套接字,设计目的是Web的安全传输,不过由于被发现存在漏洞,IETF将SSL作了标准化,即RFC2246,并将其称为TLS(Transport Layer Security)。
具体消息:2014年10月,Google发布在SSL 3.0中发现设计缺陷,建议禁用此一协议。攻击者可以向TLS发送虚假错误提示,然后将安全连接强行降级到过时且不安全的SSL 3.0,然后就可以利用其中的设计漏洞窃取敏感信息。Google在自己公司相关产品中陆续禁止向后兼容,强制使用TLS协议。Mozilla也会计划于11月25日发布的Firefox 34中,将彻底禁用SSL 3.0。微软也同样发出了安全通告。
关于TLS中文维基有很详细的描述,这里不再赘述。链接地址(需翻墙)

openssl

openssl,是目前被广泛应用的ssl的一个开源实现。 apache基金会的很多开源项目也都直接间接的引用openssl的实现。
其主要库是以C语言所写成,实现了基本的加密功能,实现了SSL与TLS协议。OpenSSL可以运行在绝大多数类Unix操作系统上(包括Solaris,Linux,Mac OS X与各种版本的开放源代码BSD操作系统),OpenVMS与 Microsoft Windows。它也提供了一个移植版本,可以在IBM i(OS/400)上运作。

算法

OpenSSL支持多种不同的加密算法:

加密:
AES、Blowfish、Camellia、SEED、CAST-128、DES、IDEA、RC2、RC4、RC5、Triple DES、GOST 28147-89
散列函数:
MD5、MD2、SHA-1、SHA-2、RIPEMD-160、MDC-2、GOST R 34.11-94[3]
公开密钥加密:
RSA、DSA、Diffie–Hellman key exchange、 Elliptic curve、GOST R 34.10-2001

某大牛说

“虽然openssl频繁爆出漏洞,代码实现很糟糕,甚至OpenBSD发起一个清理OpenSSL代码的项目。。。但是世界还是离不开它!”—蘑菇街 安全团队负责人 李润哲

Heartbleed bug

给自己也科普一下轰动全球的漏洞。
openSSL 1.0.1版本(不含1.0.1g)含有一个严重漏洞,可允许攻击者读取服务器的内存信息。该漏洞影响三分之二的活跃网站
心血漏洞是一个出现在加密程序库OpenSSL的程序错误,首次于2014年4月披露。该程序库广泛用于实现互联网的传输层安全(TLS)协议。只要使用的是存在缺陷的OpenSSL实例,无论是服务器还是客户端,都可能因此而受到攻击。此问题的原因是在实现TLS的心跳扩展时没有对输入进行适当验证(缺少边界检查),因此漏洞的名称来源于“心跳”(heartbeat)。该程序错误属于缓冲区过读,即可以读取的数据比应该允许读取的还多。

因为缺陷在于OpenSSL的实现,而不是SSL/TLS协议本身,所以除了OpenSSL之外的其他TLS实现方式,如GnuTLS和Mozilla的网络安全服务(NSS)都未受影响。此外,微软的产品或服务均不受影响。

Linux下的OPENSSL

对于像我这样的初学者,可以把OPENSSL一个功能强大的工具包,因为它集成了众多密码算法及实用工具。我们即可以利用它提供的命令台工具生成密钥、证书来加密解密文件,也可以在利用其提供的API接口在代码中对传输信息进行加密。

查看openssl提供了哪些加密算法:

$ openssl list-cipher-commands

下面对文件进行加解密的例子,用了AES
给”myfile.txt” 进行加密,用AES 的CBC模式, 在shell里运行:

$ openssl enc -aes-256-cbc -salt -in myfile.txt -out myfile.enc

会提示让你输入加密的密码~之后就加密完成了。

解密:

$ openssl enc -d -aes-256-cbc -in myfile.enc -out myfile.txt

在代码中使用的话,由于平时不做C++,就不进一步研究啦~

0 0
原创粉丝点击