赞
踩
我们生活在一个信息大爆炸的时代,几乎每天都在和互联网打交道,购物、网银转账、支付宝付款、搜索信息、查看邮件、观看视频、微信聊天、上网冲浪、阅读新闻等,无不时时刻刻在和网络打交道。那如何保护网络安全就相当重要了,其方法有很多,其中应用最为广泛的就是使用 SSL 来保护 C/S 或者 B/S 的通信安全。
SSL 能够帮助系统在客户端和服务器之间建立一条安全通信通道。SSL 安全协议是由 Netscape Communication 公司在 1994 年设计开发,SSL 依赖于加密算法、极难窃听、有较高的安全性,因此 SSL 协议已经成为网络上最常用的安全保密通信协议,该安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。
很多时候,我们并不知道如何管理和配置 SSL 证书。本课程作者将用实际的例子,手把手一步一步教大家如何使用工具生成、管理、配置 SSL 证书,该课程是一系列基础教程,涉及面广,先以一个 Tomcat 的 SSL 的配置实战为例子,然后一步步分享 SSL 的基础必备知识和管理工具。
认真学完这个系列内容,并按照提供的例子进行实战,将会深入理解 SSL 的概念、目的、证书的申请、管理、配置,基本上覆盖行业的大部分典型的应用场景,从而可以轻松超越 80% 的人,快速成为一个配置、管理、创建 SSL 证书的高手。
注意: 为了描述和表达方便,本达人课内容把 SSL 和 TLS 作为一个整体(SSL/TLS)来对待,沿用了大家熟悉的称呼 SSL。所有后面提到的有关 SSL 的关键字,其实指的都是 SSL 和 TLS。
朱清云,架构师、CSDN 博客专家,从事架构设计 8 年有余,曾先后就职于世界 500 强国企和美资外企。目前感兴趣的研究方向:企业应用集成、物联网、区块链、DevOps 自动化运维、大数据及人工智能。即将出版《MQTT 权威指南》一书,希望通过这个平台认识更多的朋友。
我们生活在一个信息大爆炸的时代,几乎每天都在和互联网打交道,购物、网银转账、支付宝付款、搜索信息、查看邮件、观看视频、微信聊天、上网冲浪、阅读新闻,无不时时刻刻在和网络打交道。如果说互联网是一个江湖,江湖险恶,江湖人心难测,难免有一些不怀好意的人对你的个人信息感兴趣,比如信用卡信息、身份证信息、网银的账号密码、特殊癖好等,那么如何保障当私人的隐秘信息从电脑手机上发送到远端的服务器上的时候,能把我们的隐私数据加密起来,即使别人得到了加密的数据,也很难解开,相当于给我们的信息加上了一把锁,方法有很多,但是目前流行和使用最广的技术手段就是 SSL(Security Socket Layer,安全套接层协议)。
SSL(Secure Socket Layer)翻译成中文就是“安全套接层”,SSL 能够帮助系统在客户端和服务器之间建立一条安全通信通道。SSL 安全协议是由 Netscape Communication 公司在 1994 年设计开发,SSL 依赖于加密算法(在后面的章节中会提到)、极难窃听、有较高的安全性,因此 SSL 协议已经成为网络上最常用的安全保密通信协议,该安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。
举一个日常生活中的简单例子,当我们用电脑打开一些常用的网站时,比如京东、淘宝、百度等,如果心细的读者会发现,不管是用微软的浏览器,还是谷歌浏览器,其浏览器的地址栏上方有一把锁,这把锁其实代表的就是 SSL 协议,是 SSL 在 HTTP 协议上的应用,用锁锁住我们的私密信息,防止私密信息在访问网站的过程中被第三方程序或者不怀好意的人监听到,如果没有这把保护我们通信安全的 SSL 锁的话,我们的信息则非常容易被第三方监听到。
君不见微信的小程序,服务器的 API 访问必须是支持 SSL 的 HTTPS 协议;谷歌也宣布对其所有的网站支持 HTTPS(Http Over SSL)协议;通过激活 SSL 协议,实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露,保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否是真实可靠。
值的一提的是,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 的版本信息如下:
值得一提的是 TLS 1.3 将在今年,也就是2018年3月21日已经被批准成为正式的 TLS 标准。
在本达人课后面的课程里,会有章节来分享如何让你知道在和服务器进行 SSL 通信时,SSL 的具体版本到底是什么?敬请期待。
注意: 为了描述和表达方便,本达人课内容把 SSL 和 TLS 作为一个整体(SSL/TLS)来对待,沿用了大家熟悉的称呼 SSL。所有后面提到的有关 SSL 的关键字,其实指的都是 SSL 和 TLS。
下面通过一个实际的实验,给大家分享一下,为什么 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:
这个时候 Fiddler 监测到的内容如下:
根据 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。
文本形式的配置如下:
<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 监听的信息的结果。
从上面的结果来看,我们的 Fiddler 监听到的已经是加过密的信息,看了这些信息,压根就不知道 Web 服务器向浏览器传输了什么信息,因为其是密文的,只有知道其秘钥的工具才能把其破解成明文,这样妈妈再也不同担心我们在网上传输个人的信息了。
在进行 SSL 实战之旅开始时,这里有必要给大家普及一些和 SSL 相关的核心概念,这样大家在阅读后面的文章时,如果遇到这些基本核心概念的时候,能够明白说的是什么;若已经对下面的这些核心概念已了解甚至精通了,可以跳过本节内容,直接进入后面的章节内容。
大家都有过出门住酒店或者买火车票飞机票的经历,当我们买飞机票和火车票的时候,取票点会让我们出示身份证证件,通过身份证就能证明我们的身份,因为身份证是有受信任的公安机关颁发的。同样的道理,当客户端连接到 SSL 服务器的时候,其也要 SSL 服务器告诉客户端一个类似于身份证的凭证文件,这个凭证就是 SSL 的证书。身份证上面有持有人的姓名、户口地址、唯一的身份证 ID、颁发的公安局机关、身份的有效日期;类似的,SSL 证书里面也有类似的信息,比如当前证书的通用名字(Common Name)、国家城市省份组织信息、联系人的邮箱、证书的指纹、颁发机构。下面以实际例子说明一下, 打开百度的网站,找到地址栏上面的锁,点击锁,在弹出的窗体中点击查看证书(View Certificates),其会弹出一个 SSL 证书,如下图所示意。
(1)先点击通用(General)页面,在通用(General)页面会显示其证书的名字,证书的颁发机构(也就是后面即将要解释的 CA),以及证书的有效日期。
(2)然后点击详细(Detail)页面,其列出了当前 SSL 证书的主要信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。