前文提到,使用SMTP协议发送邮件不安全,本文将解释具体原因与应对措施
要解释SMTP协议的不安全问题,得先说说http协议
HTTP协议
具体解释可以参考wiki HTTP协议它是一种用于分布式、协作式和超媒体信息系统的应用层协议
设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法
http交互内容是明文传输,例如获取google首页的方式:
GET / HTTP/1.1
Host: www.google.com
服务器返回内容:
HTTP/1.1 200 OK
Content-Length: 3059
Server: GWS/2.0
Date: Sat, 11 Jan 2003 02:44:04 GMT
Content-Type: text/html
Cache-control: private
Set-Cookie: PREF=ID=73d4aef52e57bae9:TM=1042253044:LM=1042253044:S=SMCc_HRPCQiqy
X9j; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Connection: keep-alive
这样有什么安全问题呢?整个交互内容除了Client和Server端,没有第三个人知道。
你可能有这样的疑问,其实不对,我们在网络上发送消息,并不是直接传递到Server端,中间会经过很多节点的转发,这样就存在干坏事的时机。
经常上网的你会碰到,有时候打开网页,莫名其妙的多了广告,而且有些是非常著名的网站,这些网站不会自主添加广告。
那这些广告是哪里来的呢?
其实是网络运营商对服务端返回的数据进行解析与篡改,由于整个交互内容是明文,很容易知道数据格式,就可以在返回数据中添加自己的广告,然后返回给用户。利用这个原理也可以做一些别的事情,例如:针对非法网页的打击。
这就是常说的 中间人劫持。
HTTPS超文本传输安全协议,是一种通过计算机网络进行安全通信的传输协议
HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
与HTTP的差异与HTTP的URL由“http://”起始且默认使用端口80不同,HTTPS的URL由“https://”起始且默认使用端口443
HTTP协议和安全协议同属于应用层(OSI模型的最高层),具体来讲,安全协议工作在HTTP之下,运输层之上:安全协议向运行HTTP的进程提供一个类似于TCP的套接字,供进程向其中注入报文,安全协议将报文加密并注入运输层套接字;或是从运输层获取加密报文,解密后交给对应的进程。
严格地讲,HTTPS并不是一个单独的协议,而是对工作在一加密连接(TLS或SSL)上的常规HTTP协议的称呼。
HTTPS报文中的任何东西都被加密,包括所有报头和荷载。
除了可能的选择密文攻击之外,一个攻击者所能知道的只有在两者之间有一连接这一事实。
由此可见,https能够实现网页信息的安全传输
SMTPS
http协议有对应的安全版本https,其实,smtp协议也有对应的安全版本smtps。
smtps协议的 wiki解释
与https协议类似,smtps协议也是通过 SSL/TLS 在传输层上通过对信息加密来保证安全性
实际例子
libcurl中有一个smtp + ssl的例子:code
我想知道,还有什么功能是libcurl不能实现的。。。