导读:引言和概述

导读:引言和概述

我们生活在一个信息大爆炸的时代,几乎每天都在和互联网打交道,购物、网银转账、支付宝付款、搜索信息、查看邮件、观看视频、微信聊天、上网冲浪、阅读新闻,无不时时刻刻在和网络打交道。如果说互联网是一个江湖,江湖险恶,江湖人心难测,难免有一些不怀好意的人对你的个人信息感兴趣,比如信用卡信息、身份证信息、网银的账号密码、特殊癖好等,那么如何保障当私人的隐秘信息从电脑手机上发送到远端的服务器上的时候,能把我们的隐私数据加密起来,即使别人得到了加密的数据,也很难解开,相当于给我们的信息加上了一把锁,方法有很多,但是目前流行和使用最广的技术手段就是 SSL(Security Socket Layer,安全套接层协议)。

enter image description here

什么是 SSL

SSL(Secure Socket Layer)翻译成中文就是“安全套接层”,SSL 能够帮助系统在客户端和服务器之间建立一条安全通信通道。SSL 安全协议是由 Netscape Communication 公司在 1994 年设计开发,SSL 依赖于加密算法(在后面的章节中会提到)、极难窃听、有较高的安全性,因此 SSL 协议已经成为网络上最常用的安全保密通信协议,该安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。

举一个日常生活中的简单例子,当我们用电脑打开一些常用的网站时,比如京东、淘宝、百度等,如果心细的读者会发现,不管是用微软的浏览器,还是谷歌浏览器,其浏览器的地址栏上方有一把锁,这把锁其实代表的就是 SSL 协议,是 SSL 在 HTTP 协议上的应用,用锁锁住我们的私密信息,防止私密信息在访问网站的过程中被第三方程序或者不怀好意的人监听到,如果没有这把保护我们通信安全的 SSL 锁的话,我们的信息则非常容易被第三方监听到。

enter image description here

君不见微信的小程序,服务器的 API 访问必须是支持 SSL 的 HTTPS 协议;谷歌也宣布对其所有的网站支持 HTTPS(Http Over SSL)协议;通过激活 SSL 协议,实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露,保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否是真实可靠。

SSL 和 TLS 的关系

值的一提的是,SSL 有很多的版本,SSL 于 1995 年发布了 3.0 的版本,但是后来,在 1999 年,IEFT(The Internet Engineering Task Force,互联网工程任务组)在 SSL 3.0 的基础上发布了 TLS 1.0(Transport Layer Security,安全套接层)协议,其标准名称编号为 RFC 2246,实际上相当于 SSL 3.1。

2006 年 TLS 1.1 以标准编号为 RFC 4346 形式发布,该版本增加了对 CBC 攻击的对策并把 AES 加入对称密码算法集中,进一步增强了其安全性,此外在 TLS 1.1 中把 AES 也加入到对称加密算法中。

2008 年 TLS 1.2 以标准标号为 RFC 5246 形式发布,该版本主要的变更就是:伪随机函数(PRF)中的 MD5-SHA-1 组合被 SHA-256 取代,可以使用密码套件指定的 PRF。

目前所有的正在使用的 SSL/TLS 的版本信息如下:

  • SSLv3
  • TLS 1.0
  • TLS 1.1
  • TLS 1.2
  • TLS 1.3

值得一提的是 TLS 1.3 将在今年,也就是2018年3月21日已经被批准成为正式的 TLS 标准。

在本达人课后面的课程里,会有章节来分享如何让你知道在和服务器进行 SSL 通信时,SSL 的具体版本到底是什么?敬请期待。

注意: 为了描述和表达方便,本达人课内容把 SSL 和 TLS 作为一个整体(SSL/TLS)来对待,沿用了大家熟悉的称呼 SSL。所有后面提到的有关 SSL 的关键字,其实指的都是 SSL 和 TLS。

为什么使用 SSL

下面通过一个实际的实验,给大家分享一下,为什么 SSL 能够保护我们在通信过程中的安全,为了简单起见,咱们以 SSL 应用于 HTTP 协议为例,通过快速搭建一个简单的 Web 服务器,来观察在使用 SSL 和不使用 SSL 时,我们的数据是如何传输的。

读者可以先到 Tomcat 的网站下载一个 Window 的安装包,下载完成后,解压缩到指定的文件夹下, 比如,D:\apache-tomcat-9.0.1,然后在 D:\apache-tomcat-9.0.1\webapps\examples\ 目录下加入一个 ssldemo.html 的文件,其内容如下:

<!DOCTYPE HTML><html lang="en"><head>
<meta charset="UTF-8">
<title>Hello SSL</title>
</head>
<body>
<p>
<h3>SSL Example</H3>
<p>大家好,我是冰尘!!!</p>
</body></html>

然后启动 Tomcat 9,在打开浏览器之前,请先下载一个名字叫 Fiddler 的软件,百度百科对 Fiddler 的介绍如下:

Fiddler 是一个 HTTP 协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的 HTTP 通讯,设置断点,查看所有的“进出” Fiddler 的数据(指 Cookie、HTML、JS、CSS 等文件,这些都可以让你胡乱修改的意思)。Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露 HTTP 通讯还提供了一个用户友好的格式。

我们可以单击这里,下载免费的工具并安装。

假设已经安装并打开了 Fiddler,在浏览器中输入下面的地址,将看到下面的内容:http://localhost:8080/examples/ssldemo.html:

enter image description here

这个时候 Fiddler 监测到的内容如下:

enter image description here

根据 Fiddler 截获的信息,我们知道在客户端和服务器传输的信息完全是明文,如果有不怀好意的人或者黑客,截取了浏览器和这个站点之间的所有 HTTP 请求的话,其上面传输的信息,所见即所得,被一览无余。在浏览器和 Web 服务器之间,如果传输只是一般的文本信息,比如 CSDN 的博客等,问题也不大。但是如果传输的是银行账号和密码呢?如果传输的是身份证信息或者信用卡信息呢?如果没有一种很好的机制去保护的话,如果被监听到了,后果将是灾难性的,那如何破这个局呢?其中一种很常见的方式,就是搭建一个基于 SSL 的 Web 服务器,让所有的信息通过 HTTPS 协议来传输。

下面笔者来配置一下 Tomcat 服务器,让其来支持 HTTPS,下面列出了其具体步骤。

1.创建一个 SSL 的证书

假设我们机器上已经安装了 JDK 并配置了 Java Home,然后打开命令行,确保 keytool 命令能用,如果不用请到 JDK 的安装目录下 bin 子目录寻找,在命令行中输入下面的命令:

keytool -genkey -alias tomcat -keyalg RSA -keystore tomcat.jks

然后按照提示,输入 first name and last name 等相关信息,这样就会生成一个证书对并存储到 tomcat.jks 文件中,另外在生成 tomcat.jks 文件的时候,其会让我们提示输入密码,假设输入的密码是:changeit。

2.保存好 JKS 文件

把 tomcat.jks 复制到 Tomcat 的安装目录下,笔者的安装目录是:D:\apache-tomcat-9.0.1,所以这里将其复制到 D:\apache-tomcat-9.0.1\conf\tomcat.jks,当然也可以不用复制,但是需要知道 tomcat.jks 文件的全路径,因为这个路径在后面需要用到。

3.配置 Tomcat 的 Server.xml 文件

在 Tomcat 的安装目录下打开 server.xml 文件,笔者的电脑上是,D:\apache-tomcat-9.0.1\conf\server.xml 文件,然后编辑这个文件,把已有的 8080 端口的 Connector 注释起来,然后加入下面新的 8443 端口的 Connector。

enter image description here

文本形式的配置如下:

<Connector
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" maxThreads="200"
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="D:/apache-tomcat-9.0.1/conf/tomcat.jks" keystorePass="changeit"
           clientAuth="false" sslProtocol="TLS"/>

4.重启启动 Tomcat 服务器

在浏览器输入 https://localhost:8443/examples/ssldemo.html 网址,此时,我们发现其走的 HTTPS 协议,也就是用 SSL 保护了的 HTTP 协议,这个时候再回头来看 Fiddler 监听的信息的结果。

enter image description here

从上面的结果来看,我们的 Fiddler 监听到的已经是加过密的信息,看了这些信息,压根就不知道 Web 服务器向浏览器传输了什么信息,因为其是密文的,只有知道其秘钥的工具才能把其破解成明文,这样妈妈再也不同担心我们在网上传输个人的信息了。

上一篇
下一篇
目录