为什么要使用SSL证书?
网络安全是一个永恒的话题,保护网络安全有很多方法,其中应用最为广泛的就是使用 SSL 证书来保护 C/S 或者 B/S 的通信安全。但是其实很多时候,我们并不知道如何管理和配置 SSL 证书。
本篇文章,笔者将会以一个生动的例子,自己搭建一个测试Web站点,并和大家分享如何配置Tomcat让其支持https。如果读者觉得不错,请收藏点赞并转发,如果收藏和转发数量大于100,我将继续分享下面的主题:
●什么是对称加密和非对称加密
●Window 操作系统下如何管理 SSL 证书?
●如何从 HTTPS 网站导出 CA 证书
●自签名证书 VS CA 证书
●如何通过可视化工具生成和管理公钥和私钥
通过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.1\webapps\examples\ssldemo.html,内容如下:
然后启动Tomcat9,在打开浏览器之前,请先下载一个名字叫做Fiddler的软件,百度百科对Fiddler的介绍如下:
Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的进出Fiddler的数据(指cookie,html,js,css等文件,这些都可以让你胡乱修改的意思)。 Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。
我们可以在下面这个地址下载这个免费的工具并安装Fiddler 。
假设我们已经安装并打开了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服务器向浏览器传输了什么信息,因为其是密文的,只有知道其秘钥的工具才能把其破解成明文。这样妈妈再也不同担心我们在网上传输个人的信息了。