非对称性加密:A生成一份公私钥,将公钥交给需要进行数据传输的B,B发送数据时先用公钥对数据进行加密,然后发送给A,再由A使用私钥进行解密。
但存在漏洞即B如何确认公钥是由A提供的。因此需要一个第三方机构(CA机构,即证书授权中心)来进行保证。A先将公钥发送给CA机构,CA机构向A确认这是它所发的公钥后,会生成一份数字证书,证书里包含了CA的认证签名与B的公钥,A再将这个数据证书发送给B,此时B就可以根据CA的认证签名确认公钥来自于A。
HTTPS:
浏览器想要对数据加密后再发送给服务器,服务器首先会出示一份数字证书给浏览器,浏览器根据上面的公钥对数据加密,然后再发送给服务器。
因此,首先我们要做的事情就是生成一份数字证书。
数字证书:
在jdk1.4以后的版本上,包含了一个数字证书的生成工具——keytool。该工具位于<java_home>/bin/keytoo.exe目录下。
如果服务器已经配置好<java_home>,可以进行windows下的命令行窗口,输入命令:
keytool -genkey -alias tomcat -keyalg RSA
然后根据图片内容进行配置
此时再进入操作系统的用户下,通常是C:UsersAdministrator,会看到里面有一个文件.keystore。
可以输入命令对它进行查看:
keytool -list -keystore .keystore
将该文件复制粘贴到tomcat的conf目录下
打开server.xml文件,配置https连接器,进入如下配置
<Connector port="2019" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="conf/.keystore" keystorePass="******" />
其中:
port=2019,配置https连接的端口为2019,这个连接器接收到浏览器请求后,将向浏览器出示一份数字证书,浏览器利用数字证书里的公钥来进行加密。
keystoreFile="conf/.keystore",指明密钥库所在的文件路径。
keystorePass="******",指明密钥库的访问密码。
保存配置文件后启动tomcat。
此时,首先访问http通道的8080端口,是可以正常打开。
再访问https通道的2019端口,浏览器会提示不安全。这是由于证书是我们手工生成的,没有经过CA的认证,浏览器认为访问这个主机是不安全的。我们可以选择下面的高级,然后在里面点击继续前往即可。
此时的2019端口也可以正常访问
用户也可以选择安装数字证书,这样之后的访问都将不会再显示证书错误。具体方法这里不做赘述。
同时,如果tomcat配置了如上的https通道,最好是将http通道删除,否则位于webapp下面的项目,不仅可以被https通道访问,也可以被http通道访问,失去了我们配置https的意义。
如在webapp下有项目testweb,则它的访问路径http://localhost:2018/testweb和https://localhost:2019/testweb都是可以正常访问,唯一的不同在于后者进行了数据加密,前者没有加密。