「文末高能」
络安全是一个永恒的话题,保护 络安全有很多方法,其中应用最为广泛的就是使用 SSL 证书来保护 C/S 或者 B/S 的通信安全。
但是其实很多时候,我们并不知道如何管理和配置 SSL 证书。因此,笔者在本场 Chat 中将会和大家分享下面的话题。
-
什么是 SSL 证书
-
为什么要使用 SSL 证书
-
什么是对称加密和非对称加密
-
Window 操作系统下如何管理 SSL 证书/span>
-
如何从 HTTPS 站导出 CA 证书
-
如何开发一个 Eclipse 插件把证书导入到 Java 的 keystore。
-
自签名证书 VS CA 证书
-
如何通过可视化工具生成和管理公钥和私钥
1. 什么是 SSL 证书/span>
根据百度百科对SSL证书的定义,SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。
SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA(在有的测试环境也可能 是自签名的证书,也就是自己给自己颁发的证书),在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。
2. 为什么要使用 SSL 证书
通过 Secure socket layer(SSL),能够帮助系统在客户端和服务器之间建立一条安全通信通道。SSL 安全协议是由 Netscape Communication 公司设计开发。
该安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。
通过激活 SSL 协议,实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露。保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的 站是否是真实可靠。
下面我们举一个例子,看 SSL 是如何保证通信的安全。我们的实验就是用 Tomcat 快速搭建一个基于 HTTPS(在HTTP协议上使用SSL) 的 Web 应用,大家可以先到 Tomcat 的 站下载一个 Window 的安装包, 下载完成后,解压缩到
比如,D:apache-tomcat-9.0.1,然后在 D:apache-tomcat-9.0.1webappsexamplesssldemo.html,内容如下:
然后启动 Tomcat9,在打开浏览器之前,请先下载一个名字叫做Fiddler的软件,百度百科对 Fiddler 的介绍如下:
Fiddler 是一个 http 协议调试代理工具,它能够记录并检查所有你的电脑和互联 之间的 http 通讯,设置断点,查看所有的“进出” Fiddler 的数据(指cookie,html,js,css 等文件,这些都可以让你胡乱修改的意思)。
Fiddler 要比其他的 络调试器要更加简单,因为它不仅仅暴露 http 通讯还提供了一个用户友好的格式。
我们可以在 https://www.telerik.com/fiddler 这个地址下载这个免费的工具并安装。
假设我们已经安装并打开了 Fiddler,在浏览器输入下面的地址,我们将看到下面的内容:http://localhost:8080/examples/ssldemo.html
这个时候 Fiddler 监测到的内容如下:
根据 Fiddler 截获的信息,我们知道在客户端和服务器传输的信息完全是明文,如果有不怀好意的人或者黑客,截取了浏览器和这个站点之间的所有的 http 请求的话,其上面传输的信息,所见即所得,被一览无余。
在浏览器和 Web 服务器之间,如果传输只是一般的文本信息,比如 CSDN 的博客等,问题也不大。
但是如果传输的是银行账 和密码呢果传输的是身份证信息或者信用卡信息呢果没有一种很好的机制去保护的话,如果被监听到了,后果将是灾难性的。
那如何破这个局呢中一种很常见的方式,就是搭建一个基于 SSL 的 Web 服务器,让所有的信息通过https协议来传输。
下面笔者来配置一下 Tomcat 服务器,让其来支持 https,因为本 chat 更偏向于实战,所以笔者列出了其具体步骤。
· 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 文件
文本形式的配置如下:
· 4. 重启启动 Tomcat 服务器
在浏览器输入,https://localhost:8443/examples/ssldemo.html。这个时候,我们发现其走的 https 协议,也就是用 SSL 保护了的 http 协议。这个时候在回头来看 Fiddler 监听的信息的结果。
从上面的结果来看,我们的 Fiddler 监听到的已经是加过密的信息,看了这些信息,压根就不知道 Web 服务器向浏览器传输了什么信息,因为其是密文的,只有知道其秘钥的工具才能把其破解成明文。这样妈妈再也不同担心我们在 上传输个人的信息了。
3. 什么是对称加密和非对称加密/span>
说起SSL证书,就不得不提对称加密和非对称加密。下面分别阐述。
3.1 对称加密
对称加密算法(Symmetric encryption)是一种计算机加密技术,使用加密密钥来伪装信息。它的数据转换使用了一个数学算法和一个私有密钥,这导致无法从加密后的消息中推出原始消息。
对称加密是一种双向算法,只要有相同的私钥,通过数学算法就能把以前用一把私钥加密的信息还原成最初的原始信息。对称加密算法的最大特点就是加密数据和解密数据使用的是同一个秘钥。
举个简单的例子,大家都喜欢看谍战剧,谍战剧里面经常会看到某一方截获了另外一方的密电,这个密电就是经过某一种方式加密过后的信息,那为什么要加密呢/span>
因为电波是朝四面八方扩散的,只要能够接收电波,就能把电波里面附带的信息记录下来,如果不加密,特别是军事情 ,那岂不是太容易被截取并泄密了吗以需要加密。
加密的方式有多种多样,举个最简单的加密方式,比如如果准备用英文单词写的电 的话,就按照字母表的顺序混淆一下,比如把 a替换成d,b替换成e,c替换成f等,总之就是把当前的字母替换为后面第三位的字母,这种替换规则就是一个秘钥。
当接受方接收到这个信息的时候,因为预先知道这个秘钥,所以,接到密文后,反向替换即可,即把密文中的d,还原成a; e还原成b,f还原成c。
因为加密解密用的同一份秘钥,加密和解密通过秘钥完全对称的,所以叫做对称加密。
目前比较通用和常见的对称加密算法主要有下面的种类:
-
AES
-
Blowfish
-
DES
-
三重 DES
-
Serpent
-
Twofish
千言万语抵不过一幅图,下面笔者从 上找了张经典的图,大家一看图就应该明白了什么时候对称加密算法。
3.2 非对称加密
既然对称加密算法这么强大,那为什么还要使用非对称加密算法呢什么又是非对称加密算法呢/span>
因为对称加密算法有一个最不安全的地方,就是秘钥的分发;如何保证秘钥能从A处共享给B的时候,特别是复杂和万能的互联 上,如何保证在交换秘钥的时候不被窃听到nbsp;
因为对于对称加密算法,只要秘钥被窃听到了,其被这个秘钥加密的任何密文就几乎不费吹灰之力就被破解出来了。 那如何避免这种风险呢个时候非对称加密算法就粉墨登场了。
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。
公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。那为什么这种机制就能很好的解决秘钥传输的问题呢/span>
举个例子,假设有通信的双方((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没有相互交换,只有各自自己知道。从而保证了通信双方通信的安全。
目前比较通用和常见的非对称加密算法主要有下面的种类:
-
RSA
-
EIGramal
-
Rabin
-
椭圆曲线密码
千言万语抵不过一幅图,下面笔者从 上找了张经典的图,大家一看图就应该明白了什么时候非对称加密算法.
4. Window 操作系统下如何管理 SSL 证书/span>
一般情况下,我们只知道我们可以通过浏览器打开和查看当前账 系统下的一些证书的信息。
那么这些证书信息是否还有其他的方式打开并查看呢实,Window 操作系统自身也提供了一个存储证书和管理证书的工具,就是 mmc 工具。操作的简要步骤如下:
Step 1. 在 run 命令中输入 mmc 或者在 cmd 的命令行中输入 mmc
Step 2. 将会打开一个 mmc 的管理台
Step 3. 在 File 菜单中选择 File->Add or Remove Snap-ins 选项,将会打开下面界面,我们选择并添加“Certificates”选项。
Step 4. 选择一个账 类型,一般选择 My User account 即可。
Step 5. 这样就能把所属的账 类型下面的证书列举出来了。
Step 6. 可以通过下图的方式导入证书(以根证书为例子)
Step 7. 可以通过下图的方式导出证书(以根证书为例子)
没有想到 Window 操作系统上还有这么方便的工具,可以通过可视化工具来进行 Window 的 SSL 证书的导入导出管理。
另外,还给大家分享另外一个在 Windows 系统上可以导入和导出证书的地方,那就是IE浏览器本身。
操作方法和上面有点类似,就不再赘述,具体步骤如下图: 打开IE→ Tools → Internet Options → Content →Certificate
5. 如何从 HTTPS 站导出 CA 证书
我们在访问 https 的时候,对于直接用 Java,.NET, Python 等语言开发的程序的时候,我们需要调用并访问 HTTPS 站的时候,需要提供访问 站的CA证书,这个时候客户端才能成功访问系统 站,那么有什么好的方法和工具能够帮助我们快速的从我们需要访问的 站上把 CA 证书导出来呢/span>
幸运的是,有热心于开源项目的行业人士为我们提供了一个方便简单的工具:portecle; 利用这个工具我们更能轻松的从 HTTPS 站上导出 SSL 的 CA 证书,大家应该等待不急了吧。OK,不和大家饶弯子了,直接进入具体操作步骤。
Step1. 下载该软件,大家可以从下面的 站下载这个软件。
http://sourceforge.net/projects/portecle/files/latest/download 当前最新的版本是1.10。
Step2. 下载完后,解压缩后,目录结构如下:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!