超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。

   为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

    HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),用于安全的传输HTTP数据。

配置Tomcat使用https协议(单向认证)_Java

因此,今天来聊一聊关于tomcat(8.5.9)的HTTPS配置步骤

安装JDK环境


安装JDK8

tar zxf jdk-8u111-linux-x64.tar.gz -C /usr/local/

export JAVA_HOME=/usr/local/jdk1.8.0_111

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$JAVA_HOME/bin:$PATH

source /etc/profile

检查JAVA环境是否安装完成

[root@centos ~]# java -version

java version "1.8.0_111"

Java(TM) SE Runtime Environment (build 1.8.0_111-b14)

Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

安装Tomcat-8.5.9


安装Tomcat

tar zxf apache-tomcat-8.5.9.tar.gz -C /usr/local/

export CATALINA_HOME=/usr/local/apache-tomcat-8.5.9

source /etc/profile

启动Tomcat服务

[root@centos ~]#/usr/local/apache-tomcat-8.5.9/bin/startup.sh

Using CATALINA_BASE: /usr/local/apache-tomcat-8.5.9

Using CATALINA_HOME: /usr/local/apache-tomcat-8.5.9

Using CATALINA_TMPDIR: /usr/local/apache-tomcat-8.5.9/temp

Using JRE_HOME: /usr/local/jdk1.8.0_111

Using CLASSPATH: /usr/local/apache-tomcat-8.5.9/bin/bootstrap.jar:/usr/local/apache-tomcat-8.5.9/bin/tomcat-juli.jar

Tomcat started.

[root@centos ~]# netstat -lntup|grep java

tcp 0 0 ::127.0.0.1:8005 :::* LISTEN 4681/java      

tcp 0  0 :::8009  :::*  LISTEN 3983/java      

tcp 0  0 :::8080  :::*  LISTEN 4681/java 

浏览器通过HTTP访问

配置Tomcat使用https协议(单向认证)_Java_02

利用JAVA自带工具keytool生成证书


[root@mingongge ~]# keytool -genkey -alias tomcat8 -keyalg RSA -keystore /usr/local/keystore

Enter keystore password:  

Re-enter new password:  输入密码,不显示

What is your first and last name?

  [Unknown]: mingongge 输入你的名字

What is the name of your organizational unit?

  [Unknown]: mingongge.com 输入组织单位名称

What is the name of your organization?

  [Unknown]: mingongge.com 输入组织名称

What is the name of your City or Locality?

  [Unknown]: hefei 输入你的城市

What is the name of your State or Province?

  [Unknown]: anhui 输入你的省

What is the two-letter country code for this unit?

  [Unknown]: CN  输入国家

Is CN=mingongge, OU=mingongge.com, O=mingogge.com, L=hefei, ST=anhui, C=CN correct?

  [no]:  y 确认配置

Enter key password for <tomcat8>

  (RETURN if same as keystore password):

  如果与前面相同直接回车,也可自定义

keytool命令如下: 

-genkey  

创建文件,文件中包含用户的公钥、私钥和证书 

-alias   产生别名

-keystore  指定密钥库的名称

-keyalg   指定密钥的算法    

-validity 指定创建的证书有效期多少天 

-keysize   指定密钥长度 

-storepass 指定密钥库的密码 

-keypass   指定别名条目的密码 

配置Tomcat


修改Tomcat配置文件

cd /usr/local/apache-tomcat-8.5.9/conf/

cp server.xml  server.xml.$(date +%F)

vim server.xml

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"

  maxThreads="150" SSLEnabled="true">

<SSLHostConfig>

 <Certificate certificateKeystoreFile="/usr/local/kestore" 

   certificateKeystorePassword="123456"

   type="RSA" />

  </SSLHostConfig>

</Connector>

重启服务

[root@centos conf]# ../bin/shutdown.sh

[root@centos conf]# ../bin/startup.sh

[root@mingongge conf]# netstat -lntup|grep java

tcp 0 0 127.0.0.1:8005 0.0.0.0:* LISTEN  12508/java

tcp 0 0 0.0.0.0:8009 0.0.0.0:*  LISTEN  12508/java

tcp 0 0 0.0.0.0:8080 0.0.0.0:*  LISTEN  12508/java

tcp 0 0 0.0.0.0:8443 0.0.0.0:*  LISTEN  12508/java

通过HTTPS协议访问


浏览器输入https://106.14.200.183:8443

配置Tomcat使用https协议(单向认证)_Java_03

因为是自生成的证书,所以才会出现上述证书安全有问题,点击继续浏览此网站即可

配置Tomcat使用https协议(单向认证)_Java_04

可能会有的小伙伴会说,https协议默认端口是443,你这是8443完全不一样,其实你错了,无非是个端口而已,因此回头将配置文件里的Connector port="8443"修改成如下

   Connector port="443"

然后重启tomcat服务再测试访问

[root@centos conf]# ../bin/shutdown.sh

[root@centos conf]# ../bin/startup.sh

[root@mingongge conf]# netstat -lntup|grep java

tcp 0 0 127.0.0.1:8005 0.0.0.0:* LISTEN 12508/java

tcp 0 0 0.0.0.0:8009 0.0.0.0:* LISTEN 12508/java      

tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 12508/java      

tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 12508/java

配置Tomcat使用https协议(单向认证)_Java_05

两次的效果是完全一样,可以看出tomcat的https协议配置完成