课程介绍
我们生活在一个信息大爆炸的时代,几乎每天都在和互联 打交道,购物、 银转账、支付宝付款、搜索信息、查看邮件、观看视频、微信聊天、上 冲浪、阅读新闻等,无不时时刻刻在和 络打交道。那如何保护 络安全就相当重要了,其方法有很多,其中应用最为广泛的就是使用 SSL 来保护 C/S 或者 B/S 的通信安全。
SSL 能够帮助系统在客户端和服务器之间建立一条安全通信通道。SSL 安全协议是由 Netscape Communication 公司在 1994 年设计开发,SSL 依赖于加密算法、极难窃听、有较高的安全性,因此 SSL 协议已经成为 络上最常用的安全保密通信协议,该安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。
认真学完这个系列内容,并按照提供的例子进行实战,将会深入理解 SSL 的概念、目的、证书的申请、管理、配置,基本上覆盖行业的大部分典型的应用场景,从而可以轻松超越 80% 的人,快速成为一个配置、管理、创建 SSL 证书的高手。
课程特色
- 语言通俗易懂:全文用通俗易懂的语言配以生活中的小例子把专业化的知识讲解透彻,小白也能明白其原理。
- 操作步骤详细:本课程中的实战例子每一步都很清晰,配的图上均有标识指示,一目了然。
- 知识点总结:基本每篇的结尾会有总结性的文字,帮助大家方便快速的回顾所学知识点。
- 快速上手演练:从头带领大家如何搭建自己的企业私有的 CA 中心,学完本课程内容后,可以轻松掌握如何管理和配置 SSL 证书。
- 代码操作证书:本课程不但会讲解如何用代码操作 SSL 证书,而且还会分享如何利用代码或者只基于配置就能调通基于 SSL 的 路请求,如 HTTPS。
- 双向 SSL 认证:以一个消息中间产品 Mosiqutto 为例子,分享如何配置使其支持双向 SSL 认证,这是一个 SSL 配置的高级应用,对于其他的消息服务器可以举一反三。
课程须知
注意: 为了描述和表达方便,本达人课内容把 SSL 和 TLS 作为一个整体(SSL/TLS)来对待,沿用了大家熟悉的称呼 SSL。所有后面提到的有关 SSL 的关键字,其实指的都是 SSL 和 TLS。
朱清云,架构师、CSDN 博客专家,从事架构设计 8 年有余,曾先后就职于世界 500 强国企和美资外企。目前感兴趣的研究方向:企业应用集成、物联 、区块链、DevOps 自动化运维、大数据及人工智能。即将出版《MQTT 权威指南》一书,希望通过这个平台认识更多的朋友。
课程内容
导读:引言和概述
我们生活在一个信息大爆炸的时代,几乎每天都在和互联 打交道,购物、 银转账、支付宝付款、搜索信息、查看邮件、观看视频、微信聊天、上 冲浪、阅读新闻,无不时时刻刻在和 络打交道。如果说互联 是一个江湖,江湖险恶,江湖人心难测,难免有一些不怀好意的人对你的个人信息感兴趣,比如信用卡信息、身份证信息、 银的账 密码、特殊癖好等,那么如何保障当私人的隐秘信息从电脑手机上发送到远端的服务器上的时候,能把我们的隐私数据加密起来,即使别人得到了加密的数据,也很难解开,相当于给我们的信息加上了一把锁,方法有很多,但是目前流行和使用最广的技术手段就是 SSL(Security Socket Layer,安全套接层协议)。
君不见微信的小程序,服务器的 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.1webappsexamples 目录下加入一个 ssldemo.html 的文件,其内容如下:
然后启动 Tomcat 9,在打开浏览器之前,请先下载一个名字叫 Fiddler 的软件,百度百科对 Fiddler 的介绍如下:
Fiddler 是一个 HTTP 协议调试代理工具,它能够记录并检查所有你的电脑和互联 之间的 HTTP 通讯,设置断点,查看所有的“进出” Fiddler 的数据(指 Cookie、HTML、JS、CSS 等文件,这些都可以让你胡乱修改的意思)。Fiddler 要比其他的 络调试器要更加简单,因为它不仅仅暴露 HTTP 通讯还提供了一个用户友好的格式。
我们可以单击这里,下载免费的工具并安装。
假设已经安装并打开了 Fiddler,在浏览器中输入下面的地址,将看到下面的内容:http://localhost:8080/examples/ssldemo.html:
根据 Fiddler 截获的信息,我们知道在客户端和服务器传输的信息完全是明文,如果有不怀好意的人或者黑客,截取了浏览器和这个站点之间的所有 HTTP 请求的话,其上面传输的信息,所见即所得,被一览无余。在浏览器和 Web 服务器之间,如果传输只是一般的文本信息,比如 CSDN 的博客等,问题也不大。但是如果传输的是银行账 和密码呢果传输的是身份证信息或者信用卡信息呢果没有一种很好的机制去保护的话,如果被监听到了,后果将是灾难性的,那如何破这个局呢中一种很常见的方式,就是搭建一个基于 SSL 的 Web 服务器,让所有的信息通过 HTTPS 协议来传输。
下面笔者来配置一下 Tomcat 服务器,让其来支持 HTTPS,下面列出了其具体步骤。
1.创建一个 SSL 的证书
假设我们机器上已经安装了 JDK 并配置了 Java Home,然后打开命令行,确保 keytool 命令能用,如果不用请到 JDK 的安装目录下 bin 子目录寻找,在命令行中输入下面的命令:
然后按照提示,输入 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.1conftomcat.jks,当然也可以不用复制,但是需要知道 tomcat.jks 文件的全路径,因为这个路径在后面需要用到。
3.配置 Tomcat 的 Server.xml 文件
从上面的结果来看,我们的 Fiddler 监听到的已经是加过密的信息,看了这些信息,压根就不知道 Web 服务器向浏览器传输了什么信息,因为其是密文的,只有知道其秘钥的工具才能把其破解成明文,这样妈妈再也不同担心我们在 上传输个人的信息了。
第01课:SSL 核心概念和术语
在进行 SSL 实战之旅开始时,这里有必要给大家普及一些和 SSL 相关的核心概念,这样大家在阅读后面的文章时,如果遇到这些基本核心概念的时候,能够明白说的是什么;若已经对下面的这些核心概念已了解甚至精通了,可以跳过本节内容,直接进入后面的章节内容。
- 认识 SSL 证书
- 对称加密
- 非对称加密
- 商业 CA(Certificate Authority)和私有 CA
- 证书签名请求(CSR)
认识 SSL 证书
大家都有过出门住酒店或者买火车票飞机票的经历,当我们买飞机票和火车票的时候,取票点会让我们出示身份证证件,通过身份证就能证明我们的身份,因为身份证是有受信任的公安机关颁发的。同样的道理,当客户端连接到 SSL 服务器的时候,其也要 SSL 服务器告诉客户端一个类似于身份证的凭证文件,这个凭证就是 SSL 的证书。身份证上面有持有人的姓名、户口地址、唯一的身份证 ID、颁发的公安局机关、身份的有效日期;类似的,SSL 证书里面也有类似的信息,比如当前证书的通用名字(Common Name)、国家城市省份组织信息、联系人的邮箱、证书的指纹、颁发机构。下面以实际例子说明一下, 打开百度的 站,找到地址栏上面的锁,点击锁,在弹出的窗体中点击查看证书(View Certificates),其会弹出一个 SSL 证书,如下图所示意。
(2)然后点击详细(Detail)页面,其列出了当前 SSL 证书的主要信息。
- SSL 证书的主题(Subject)
类似于身份证的名字、户口地址信息.
- SSL 证书的颁发者
SSL 证书的颁发者(Issuer)类似于身份证里面的颁发身份证的公安局信息。
- 其他
在 SSL 证书的详情(Detail)页面还有其他的信息、签名的算法、签名的哈希算法、指纹算法、有效日期范围等等,感兴趣的读者可以自行找一个证书点击理解,如果有任何问题,可以在我的读者圈留言。
(3)最后点击证书路径(Certification Path),我们会看到百度 站证书,总共有三个层级,这个就是证书的路径,其表明了颁发的归属关系。
还是拿身份证为例子,比如,一个北京海淀区居民的身份证,其颁发机构是北京市海淀区公安分局颁发的,那北京海淀区公安分局颁发是谁授权其颁发身份证的权利的当然是其上级单位,比如北京市公安局,而北京市公安局又是中国公安部最终给授权的,也就是根授权。
现在拿我们的百度证书路径显示的信息来进行类比,baidu.com 这张证书是 Symantec Class 3 Secure Server CA -G4 这个中级证书授权的,这个中级证书就相当于北京海定区公安分局或者北京市公安局,而 Symantec Class 3 Secure Server CA -G4 这个证书还没有到顶,其又是 Versign 授权的,但是 Versign 到顶了,这个 Versign 就相当于中国公安部,其本质就是一个层级的授权结构。
非对称加密
既然对称加密算法这么强大,那为什么还要使用非对称加密算法呢什么又是非对称加密算法呢/p>
因为对称加密算法有一个最不安全的地方,就是秘钥的分发;如何保证秘钥能从 A 处共享给 B 的时候,特别是在复杂和万能的互联 上,如何保证在交换秘钥的时候不被窃听到为对于对称加密算法,只要秘钥被窃听到了,其被这个秘钥加密的任何密文几乎不费吹灰之力就被破解出来了,那如何避免这种风险呢个时候非对称加密算法就粉墨登场了。
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey),公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。那为什么这种机制就能很好的解决秘钥传输的问题呢举个例子,假设有通信的双方(A 和 B),需要交换一个秘密信息,A 会生成一个秘钥对,公钥 A 和私钥 A;B 也会生成一个秘钥对,公钥 B 和私钥 B,假设 A 和 B 都能把自己私钥保护的滴水不漏,只要 A 和 B 两个人自己知道自己各自的私钥,其他任何人都不知道,就能保证信息交换的安全,交换的过程如下:
- 首先 A 把自己的公钥发送给 B,B 也把自己的公钥发送给 A。
- A 把要发送给 B 的信息,用 B 的公钥进行加密,然后发送给 B,因为只有 B 有 B 公钥所对应的私钥 B,所以即使被传输的信息被第三方监听到,也没有关系,因为只要私钥 B 才能解密。
- B 收到从 A 发送过来的用公钥 B 加密的信息后,用自己独一份的私钥 B 把信息解密;然后根据 A 的信息,知道某一个重要的秘密,为了对 A 进行回复,B 就会用 A 给公钥把需要回复的信息加密发送给A。
- 因为只有 A 有 A 公钥所对应的私钥 A,所以即使被传输的信息被第三方监听到,也没有关系,因为只要私钥 A 才能解密。
是不是整个通信就非常安全了为任何第三方即使在公钥 A 和公钥 B 相互交换的过程中知道到了公钥 A 和公钥 B,也没有用,因为私钥 A 和私钥 B 没有相互交换,只有各自自己知道,从而保证了通信双方通信的安全。
目前 SSL/TLS 支持三种算法,但实际上只有 RSA 这一种被广泛使用;DSA 已经被废弃,而 ECDSA 在未来几年内有望被广泛使用。
(1)RSA
需要说明的是,RSA 算法是最常见的一种选择,基本上所有的 SSL/TLS 部署都会支持 RSA 算法,但是,RSA 在 2048 位(最小位数)的密钥下,比 ECDSA 密钥在安全性上更弱并且性能更差。更糟的是,增加 RSA 密钥长度是性能消耗的增加并不是线性的,如果你觉得 2048 位的加密强度不够,需要使用更高的位数(比如 3072 位)的 RSA 密钥时,在性能上就会有极大幅度的下降。
(2)DSA
DSA 算法现在被应用的比较少了:因为 DSA 的密钥长度最大只能到 1024 位(IE 浏览器也不支持更高强度),这个位数根本无法确保安全性,所以没有人会在 SSL/TLS 实际应用中使用 DSA 算法,与所有人背道而驰的结果是让你陷入兼容性问题中。
(3)ECDSA(椭圆曲线数字签名算法)
ECDSA 算法是未来的选择,256 位的 ECDSA 密钥有 128 位用于安全加密上,相对而言,2048 位的 RSA 密钥只有 112 位是真正用于安全加密的。不仅如此,在这个加密强度下,ECDSA 比 RSA 算法快 2 倍;如果是与 3072 位的 RSA 密钥在相同加密强度下相比,ECDSA 性能要快 6 倍以上。
因为椭圆曲线(Elliptic Curve,EC)算法是最近才被加入到 TLS 的安全体系中,所以 ECDSA 的问题在于:不是所有用户端都支持这种算法。新的浏览器都支持 ECDSA,但是一些老版本的浏览器是不支持这个算法的。你可以通过同时部署 RSA 和 ECDSA 的密钥来解决对新老浏览器的兼容,但并不是所有服务程序都能提供这种配置方式,另外这种方案也需要额外的工作来同时维护两套密钥和证书。因此,就现状而言,ECDSA 的最佳使用场景是用于部署追求最高性能的 TLS 服务系统。未来,随着我们对安全的日益重视,ECDSA 也会变得越来越重要。
千言万语抵不过一幅图,下面是笔者从 上找了张经典的图,大家一看图就应该明白了什么是非对称加密算法。
注意:因为上面一个命令同时生成了自签名证书的公钥和私钥并存在在 KeyStore 文件中,所以需要一个保护这个 KeyStore 的密码,比如当前的这个例子,为了简单起见,我输入的是“123456”,这对于测试环境和开发环境已经足够,但是如果是正式的生成环境,建议用一个强度高的密码进行保护。
我们可以通过下面的命令查看 keystore.jks(比如路径在 c:keystore.jks)里面生成的自签名证书的详细细节。
注意,最后的参数 -v 不能省略,其代表 Verbose,否则其就得不到详细的信息,而且其会提示让我们输入密码,密码就是上面步骤提到的保护。
下面是其具体的输出信息详情。
(2)利用私钥生成 CSR:
OpenSSL 简介
OpenSSL 是一个稳定的、商用等级的、功能全面的、免费开源的,专为 SSL/TLS 而生一款工具,其命令功能主要分为下面三大类。
标准命令
大家比较常见的就是 RC(是一种对称加密,加密的密钥流和明文一样长,同样的密钥和同样的长度能确定同一个密钥流),DES(一种将 64 比特的明文加密成 64 比特的密文的对称加密算法),AES(Advanced Encryption Standard,在密码学中又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准),BASE64(一种把二进制加密成为 ASCII 字符),CBC(CBC 模式由 IBM 发明与 1976 年,在 CBC 模式中,每个明文块先与前一个密文块进行异或后,再进行加密)等算法。感兴趣的读者可以自行百度或者 Google, 上的资料比较多,这里就不再赘述了。
OpenSSL 安装
下载地址详见这里。
下载完成之后就可以进行安装了。
打开 cmd 命令窗口,输入 openssl version,如果显示版本 ,那么恭喜你安装成功,否则安装失败。
如上图所示,其显示当前的安装版本是 1.1.0g,安装的目录是 “C:Program FilesOpenSSL”。
帮助命令
当学习一门新技术时,很多人首先会想它有没有提供一些 help,那 OpenSSL 有没有为我们提供呢OpenSS 作为一个强大的工具库,答案肯定是有。OpenSSL 为我们提供了 OpenSSL help 这个强大的命令,可以概览 OpenSSL 的所有命令,我们只需要在 cmd 控制台输入 openssl help 即可:
基本的命令
创建一个私钥
通过 openssl help 命令,我们可以知道通过 genrsa 可以生成一个高强度的私钥,如果直接在 openSSL 的控制台输入 genrsa,则其会默认生成一个 2048 位的私钥。
则其会生成一个 fd.key 的私钥,用记事本打开,其内容如下:
使用 RSA 密码工具查看其私钥的具体信息
上面我们用 genrsa 生成了一个私钥,因为 OpenSSL 也提供了一些密码学的工具,我们可以借助其提供的 RSA 的密码工具,来查看其私钥的相关的信息。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!