tomcat服务实现HTTPS加密方式

1、概念简介
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。

HTTP 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。
2、HTTPS和HTTP的区别
1、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。

2、HTTPS 协议需要到 CA 申请证书,一般免费证书很少,需要交费。

3、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。

4、HTTP 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

第一个历程:生成证书

使用jdk自带的keytool工具生成证书
证书是单点登录认证系统中很重要的一把钥匙,客户端于服务器的交互安全靠的就是证书;这里由于是演示所以就自己用JDK自带的keytool工具生成证书;如果以后真正在产品环境中使用肯定要去证书提供商去购买。

用JDK自带的keytool工具生成证书方法如下:

keystore的生成方法1(分阶段生成)
keytool -genkey -alias tomcat(别名) -keypass tomcat(别名密码) -keyalg RSA(算法) -keysize 1024(密钥长度) -validity 365(有效期,天单位) -keystore /usr/local/tomcat/ssl/tomcat.keystore (指定生成证书的位置和证书名称) -storepass 123456(获取keystore信息的密码) -deststoretype pkcs12(指定证书格式)

回车输入相关信息即可;

keystore的生成方法2(一次性生成)
keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore /u.ksr.keystore -storepass 123456 -dname ".keystore -storepass 123456 -deststoretype pkcs12(指定证书格式) -dname “CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(州或省份.称, C=(单位的两字母国家代码)”;(中英文即可)

[root@master ~]#  keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore  /root/tomcat.keystore -storepass 123456 -deststoretype pkcs12 -dname "CN=(tomcat), OU=(tomcat), O=(tomcat), L=(beijing), ST=(beijing), C=(cn)"

在root目录下生成一个名为tomcat.keystore的证书文件

keystore信息的查看

[root@master ~]# keytool -list  -v -keystore /root/tomcat.keystore -storepass 123456

密钥库类型: JKS

密钥库提供方: SUN

 

您的密钥库包含 1 个条目

 

别名: tomcat

创建日期: 2018-8-15

条目类型: PrivateKeyEntry

证书链长度: 1

证书[1]:

所有者: CN=(tomcat), OU=(tomcat), O=(tomcat), L=(beijing), ST=(beijing), C=(cn)

发布者: CN=(tomcat), OU=(tomcat), O=(tomcat), L=(beijing), ST=(beijing), C=(cn)

序列号: 346aa6a

有效期为 Wed Aug 15 22:40:05 CST 2018 至 Thu Aug 15 22:40:05 CST 2019

证书指纹:

          MD5:  F0:5D:20:97:04:E0:3D:C2:40:FC:40:17:F3:48:E3:36

          SHA1: 6D:C8:0B:A9:76:5D:03:20:4D:A4:CD:6F:F5:93:E2:5D:A0:B4:3A:76

          SHA256: 46:F1:F8:BB:7E:AF:C5:55:BE:82:65:D2:3C:1A:95:1A:A3:4C:15:28:4D:EC:10:D7:D1:DE:4D:4F:6D:3B:B6:9F

签名算法名称: SHA256withRSA

主体公共密钥算法: 1024 位 RSA 密钥

版本: 3

 

缺省情况下,-list 命令打印证书的 MD5 指纹。而如果指定了 -v 选项,将以可读格式打印证书,如果指定了 -rfc 选项,将以可打印的编码格式输出证书。

[root@master ~]# keytool -list  -rfc -keystore /usr/local/tomcat/ssl/tomcat.keystore -storepass 123456

密钥库类型: JKS

密钥库提供方: SUN

 

您的密钥库包含 1 个条目

 

别名: tomcat

创建日期: 2018-8-15

条目类型: PrivateKeyEntry

证书链长度: 1

证书[1]:

-----BEGIN CERTIFICATE-----

MIICejCCAeOgAwIBAgIEA0aqajANBgkqhkiG9w0BAQsFADBwMQ0wCwYDVQQGEwQo

Y24pMRIwEAYDVQQIEwkoYmVpamluZykxEjAQBgNVBAcTCShiZWlqaW5nKTERMA8G

A1UEChMIKHRvbWNhdCkxETAPBgNVBAsTCCh0b21jYXQpMREwDwYDVQQDEwgodG9t

Y2F0KTAeFw0xODA4MTUxNDQwMDVaFw0xOTA4MTUxNDQwMDVaMHAxDTALBgNVBAYT

BChjbikxEjAQBgNVBAgTCShiZWlqaW5nKTESMBAGA1UEBxMJKGJlaWppbmcpMREw

DwYDVQQKEwgodG9tY2F0KTERMA8GA1UECxMIKHRvbWNhdCkxETAPBgNVBAMTCCh0

b21jYXQpMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdo4jFF69gWQPzvCZl

E520LdQH51aCbTIAAZxHyAnuI2eI5MH+PepK9hWLpaUZ7ldS9IRb3ECG2K2DIzP7

QwM1QyRqHgCQ8jaVhU6oLa7SS9sAlG8Sq+xTbu9EcJhsV/0BTAg2aGKh/+1yIkAA

Vevl0cjhH7RfyicOMWCu2YbnlQIDAQABoyEwHzAdBgNVHQ4EFgQUfViJoJUJec0N

WlZpNavfTk9rmo4wDQYJKoZIhvcNAQELBQADgYEACksq/r+TsIc4DlKxed9FWuqx

YQOtbeFTZmGQbyPQ7CbsAanT4QJbKkNsL/GUSFcG9IswZDPUiWRC1/Tac5jMO19i

YXcDdeABdiSCw8aFrAyy6kkW1371HoDaJ1kEzRTqNmycyMMbuTbkmN2ImzQl0Gro

vMGIcDG4rCgnoMQUNv0=

-----END CERTIFICATE-----

*******************************************

*******************************************

keytool工具介绍

-genkey      在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书
-alias       产生别名
-keystore    指定密钥库的名称(产生的各类信息将不在.keystore文件中)
-keyalg      指定密钥的算法 (如 RSA  DSA(如果不指定默认采用DSA))
-validity    指定创建的证书有效期多少天
-keysize     指定密钥长度
-storepass   指定密钥库的密码(获取keystore信息所需的密码)
-keypass     指定别名条目的密码(私钥的密码)
-dname       指定证书拥有者信息

-list        显示密钥库中的证书信息      keytool -list -v -keystore 指定keystore -storepass 密码
-export      将别名指定的证书导出到文件

-file        参数指定导出到文件的文件名
-delete      删除密钥库中某条目 

-printcert   查看导出的证书信息  
-keypasswd   修改密钥库中指定条目口令

-storepasswd  修改keystore口令 

-import          将已签名数字证书导入密钥库

-certreq            生成证书请求

 -changealias        更改条目的别名

 -delete             删除条目

 -exportcert         导出证书

 -genkeypair         生成密钥对

 -genseckey          生成密钥

 -gencert            根据证书请求生成证书

 -importcert         导入证书或证书链

 -importpass         导入口令

 -importkeystore     从其他密钥库导入一个或所有条目

 -keypasswd          更改条目的密钥口令

 -list               列出密钥库中的条目

 -printcert          打印证书内容

 -printcertreq       打印证书请求的内容

 -printcrl           打印 CRL 文件的内容

 -storepasswd        更改密钥库的存储口令

 

keytool -importkeystore [OPTION]...

从其他密钥库导入一个或所有条目

-srckeystore <srckeystore>            源密钥库名称

 -destkeystore <destkeystore>          目标密钥库名称

 -srcstoretype <srcstoretype>          源密钥库类型

 -deststoretype <deststoretype>        目标密钥库类型

 -srcstorepass <arg>                   源密钥库口令

 -deststorepass <arg>                  目标密钥库口令

 -srcprotected                         受保护的源密钥库口令

 -srcprovidername <srcprovidername>    源密钥库提供方名称

 -destprovidername <destprovidername>  目标密钥库提供方名称

 -srcalias <srcalias>                  源别名

 -destalias <destalias>                目标别名

 -srckeypass <arg>                     源密钥口令

 -destkeypass <arg>                    目标密钥口令

 -noprompt                             不提示

 -providerclass <providerclass>        提供方类名

 -providerarg <arg>                    提供方参数

 -providerpath <pathlist>              提供方类路径

 -v            显示密钥库中的证书详细信息

修改配置文件内容

 66          APR (HTTP/AJP) Connector: /docs/apr.html
 67          Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
 68     -->
 69     <Connector port="8080" protocol="HTTP/1.1"
 70                connectionTimeout="20000"
 71                redirectPort="8443" />
 72     <!-- A "Connector" using the shared thread pool-->
 73     <!--
 74     <Connector executor="tomcatThreadPool"
 75                port="8080" protocol="HTTP/1.1"
 64          Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
 65          Java AJP  Connector: /docs/config/ajp.html
 66          APR (HTTP/AJP) Connector: /docs/apr.html
 67          Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
 68     -->
 69     <Connector port="8080" protocol="HTTP/1.1"
 70                connectionTimeout="20000"
 71                redirectPort="8443" />
 72     <!-- A "Connector" using the shared thread pool-->
 73     <!--
 74     <Connector executor="tomcatThreadPool"
 75                port="8080" protocol="HTTP/1.1"
 76                connectionTimeout="20000"
 77                redirectPort="8443" />
 78     -->
 79     <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
 80          This connector uses the NIO implementation that requires the JSSE
 81          style configuration. When using the APR/native implementation, the
 82          OpenSSL style configuration is required as described in the APR/native
 83          documentation -->
 84 
 85     <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
 86                maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
 87                clientAuth="false" sslProtocol="TLS"
 88                keystoreFile="/root/tomcat.keystore"
 89                keystorePass="123456" 
 90  />
 91 
 92 
 93     <!-- Define an AJP 1.3 Connector on port 8009 -->
 94     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
 95 
 96 

在这里插入图片描述

说明:certificateKeystoreFile 证书文件存放位置

      certificateKeystoreType 证书文件类型

      certificateKeystorePassword  证书的密码

重启tomcat服务,输入 https://IP地址
进行访问测试
这里不输入端口号,只是输入IP地址

在这里插入图片描述

实现HTTP自动跳转为HTTPS

上面我们实现了HTTPS访问,但是客户使用http访问,还是会走http协议,依然是不安全的,没有达到我们的需求,下面配置HTTP自动跳转到HTTPS。

第一个历程:修改web.xml文件
在web.xml文件中后面,也就是倒数第二行里,加上如下配置:
在该文件后面加上这样一段:

<login-config>  
    <!-- Authorization setting for SSL -->  
    <auth-method>CLIENT-CERT</auth-method>  
    <realm-name>Client Cert Users-only Area</realm-name>  
</login-config>  
<security-constraint>  
    <!-- Authorization setting for SSL -->  
    <web-resource-collection >  
        <web-resource-name >SSL</web-resource-name>  
        <url-pattern>/*</url-pattern>  
    </web-resource-collection>  
    <user-data-constraint>  
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>  
    </user-data-constraint>  
</security-constraint> 

第二个历程:修改server.xml文件
在这里插入图片描述
第三个历程重启tomcat服务并查看端口

[root@test bin]# shutdown.sh 
Using CATALINA_BASE:   /application/tomcat
Using CATALINA_HOME:   /application/tomcat
Using CATALINA_TMPDIR: /application/tomcat/temp
Using JRE_HOME:        /application/jdk
Using CLASSPATH:       /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
[root@test bin]# startup.sh 
Using CATALINA_BASE:   /application/tomcat
Using CATALINA_HOME:   /application/tomcat
Using CATALINA_TMPDIR: /application/tomcat/temp
Using JRE_HOME:        /application/jdk
Using CLASSPATH:       /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@test bin]# netstat  -ntpl 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6827/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      6976/master         
tcp6       0      0 :::8009                 :::*                    LISTEN      7353/java           
tcp6       0      0 :::80                   :::*                    LISTEN      7353/java           
tcp6       0      0 :::22                   :::*                    LISTEN      6827/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      6976/master         
tcp6       0      0 :::443                  :::*                    LISTEN      7353/java           
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      7353/java           
[root@test bin]# 

测试:
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章