上一节说到如何在tomcat里面加入ssl单向认证,可能很多人对此看得不是很明白,这个与我们的spring MVC项目有什么安全性相关,在tomcat加入了ssl单向认证就可以保证安全了吗?这里我将一一解释。
首先,我们需要了解几个知识点。
1、ssl
关于ssl,它是一种协议,就是在网络传输数据一种通信协议。它的全称是Secure Sockets Layer ,就是安全套接层的意思,它是专门为网络通信提供安全及数据完整性的一种安全协议SSL,大家可以看回上一节说到的单双向的解释就可以知道。它和TLS一起在传输层对网络连接进行加密。
它的功能主要就是:认证用户和服务器,保证我们的数据能够准确的发送到客户端和服务器,加密数据保证了在传输的过程中,不被网络监听者篡改。保证了数据传输的完整性。
2、https
https,它也是一个通信协议,可以说它是我们平时进行网站访问的http的进化版,我们的HTTP协议平时在我们进行网络传输的时候,是没有进行加密与验证的,而HTTPS就是在http层加入了ssl层,使得我们在数据交换的时候加入了加密与验证的功能,从而保证了数据的安全性。而https访问网站的时候,就说明了我们进行数据传输是使用ssl协议的
3、ca与ca证书
CA,Certificate Authority,它是CA 是数字证书认证中心的简称,它的作用是检查证书持有者身份的合法性,并签发证书,以防证书被伪造或篡改,以及对证书和密钥进行管理, CA证书,它是由公钥用户信息、公钥、权威机构的签字和有效期组成,有了这些信息我们就可以对我们的网站使用公钥进行验证,简单的来说,CA就是第三方可以让我们公众用户信任的认证机构,它负责对证书的认证与管理。国内的证书比较多的是wosign颁发的。
4、自制证书,就是我们自己制作SSL证书,我们知道CA证书是第三方认证机构颁发的证书,有了它我们就可以实现了我们的需求了。我们还需要自己制作证书?那是有必要的,因为我们现在证书认证,每年需要交纳一定的费用,而且费用不低。所以有自己制作证书的需要,不过自制证书与CA证书存在最大的安全性问题是,自制证书不能销毁,而CA证书可以销毁的,假如你的私钥被其它人拿到,那么他们可以伪装成你,然后对你的用户进行各种通信,而且自制证书还需要用户的客户端进行安装证书,而CA证书只有安装一次就可以对所以由CA证书颁发的网站进行认证,所以对于数据比较严谨的网站与应用一定要使用CA证书。
5、加密与解密:就是我们平时数据传输的时候把明文转换成我们无法阅读的数据(密文),而解密则是把密文转换成我们可以阅读的明文,比如是我们发送一条信息,内容为“a”,我们可能通过移位的加密算法,将字母移动一位传输,变成了“b”,然后在对方接受到数据的时候,我们解密需要将“b”移位减1,这样就可以得到“a”.
6、spring mvc、tomcat、ssl,https、ca、自制证书之间的关系
由于我们的spring mvc 是使用了tomcat服务器,所以我们的spring mvc项目是运行在tomcat上的,而
https是有ssl+http组合而成,通过HTTPS来访问我们的spring mvc 项目就可以实现安全的通信,CA就是颁发ssl证书的机构,而自制的证书可以在我们本地实现ssl的加密传输。
7、如何让我们的网站支持HTTPS
有两种方式,1是我们可以通过由CA机构颁发证书,大家可以去wosign看看,2是通过自制证书实现,我在上一节一节说到tomcat+ssl单向认证。
以下是头条加入了SSL证书的显示效果。
上一节我们说到双向认证,说到双向认证,那么我们就需要制作两个证书,服务器和客户端的。
tomcat 双向认证证书的制作
首先安装好java的环境。我们是使用java的keytool制作的。
1、服务器证书生成
keytool -genkey -v -alias yeehotserver -dname "CN=localhost" -keyalg RSA -keypass ming1234 -keystore server.keystore -storepass ming1234 -validity 3650
这里alias是别名,keypass、storepass就是密码,storepass就是存储的名字。validity有效期多少天。表示绑定域名CN=localhost
2、客户端证书生成
keytool -genkey -v -alias yeehotclient -dname "CN=ming" -keyalg RSA -keypass ming1234 -keystore client.p12 -storepass ming1234 -storetype PKCS12 -validity 3650
这里需要保存成.p12格式,做苹果推送证书我们经常会见到的。
3、服务器信任客户端证书
我们操作到这里,服务器证书和客户端证书似乎没有一点关系,我们为了可以让服务器对客户端的证书进行信任,这样才可以进行认证。我们首先需要将.p12转换成.cer证书
keytool -export -alias yeehotclient -file yeehotclient.cer -keystore client.p12 -storepass ming1234 -storetype PKCS12
接着将证书导入到服务器证书
keytool -import -v -alias yeehotclient -file yeehotclient.cer -keystore server.keystore -storepass ming1234
最后输入“是”
这个时候已经存储到server.
4、客户端信任服务器证书
因为我们是双向SSL认证,那么我们的客户端也要验证服务器证书
导出服务器证书
keytool -keystore server.keystore -export -alias yeehotserver -file server.cer
配置tomcat
我们打开tomcat的配置文件。conf下的server.xml
我们找到注释的
把它修改成我们的配置文件
protocol="HTTP/1.1" minSpareThreads="150" maxSpareThreads="75" enableLookups="true" disableUploadTimeout="true" acceptCount="100" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" clientAuth="true" sslProtocol="TLS" keystoreFile="./conf/server.keystore" keystorePass="ming1234" truststoreFile="./conf/server.keystore" truststorePass="ming1234" /> 属性说明: clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证 keystoreFile:服务器证书文件路径 keystorePass:服务器证书密码 truststoreFile:用来验证客户端证书的根证书 truststorePass:根证书密码 这是如果我们没有在浏览器安装客户端的证书的,无法显示网页,为了区别我们在不同的电脑验证一下。 我们可以验证一下证书的安装。 我们把生成的证书yeehotclient.cer双击安装到客户端 IE 浏览器。这个时候导入了我们客户端的证书。 输入https://localhost:8443/,可以看到页面。 我们可以看服务器的已经使用了刚刚创建的localhost证书。 对于SSL配置可能还会遇到一些问题,tomcat的不同版本问题,还有域名的配置,这个大家可以 今天的配置就说到这里,欢迎订阅我的头条号:一点热