Tomcat配置https訪問

Tomcat配置https訪問

1、概念簡介

Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不是很多的場合下被普遍使用,是開發和調試 JSP 程序的首選。

HTTP 超文本傳輸協議(HTTPHyperText Transfer Protocol)是互聯網上應用最爲廣泛的一種網絡協議。所有的WWW文件都必須遵守這個標準。

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。

2HTTPSHTTP的區別

1HTTP 是超文本傳輸協議,信息是明文傳輸,HTTPS 則是具有安全性的 SSL 加密傳輸協議。

2HTTPS 協議需要到 CA 申請證書,一般免費證書很少,需要交費。

3HTTP HTTPS 使用的是完全不同的連接方式,用的端口也不一樣,前者是 80,後者是 443

4HTTP 的連接很簡單,是無狀態的;HTTPS 協議是由 SSL+HTTP 協議構建的可進行加密傳輸、身份認證的網絡協議,比 HTTP 協議安全。

3Tomcat實現HTTPS步驟大綱

1、添加域名解析:到自己的域名解析商處,添加一條A記錄指向你的服務器IP即可。

2、申請證書:使用剛纔添加的域名申請一個SSL證書;

3、上傳證書到tomcat服務器:在tomcat目錄新建一個ssl目錄,將證書文件上傳到這個目錄;

4、修改server.xmlvim打開server.xml,添加ssl連接器

5、修改HOST配置

6、重啓Tomcat服務

7、查詢端口是否監聽

8、測試訪問

4、配置tomcat實現https訪問

主機IP192.168.10.10

系統版本:centos7.2

tomcat版本:tomcat 8.5.8

4.1、使用jdk自帶的keytool工具生成證書

證書是單點登錄認證系統中很重要的一把鑰匙,客戶端於服務器的交互安全靠的就是證書;這裏由於是演示所以就自己用JDK自帶的keytool工具生成證書;如果以後真正在產品環境中使用肯定要去證書提供商去購買。

JDK自帶的keytool工具生成證書方法如下:

4.1.1keystore的生成方法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(指定證書格式)

回車輸入相關信息即可;

4.1.2keystore的生成方法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  /usr/local/tomcat/ssl/tomcat.keystore -storepass 123456 -deststoretype pkcs12 -dname "CN=(tomcat), OU=(tomcat), O=(tomcat), L=(beijing), ST=(beijing), C=(cn)"

4.1.3keystore信息的查看

[root@master ~]# keytool -list  -v -keystore /usr/local/tomcat/ssl/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-----

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

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

4.2keytool工具介紹

-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            顯示密鑰庫中的證書詳細信息

 

4.3、修改tomcat配置文件server.xml

修改配置文件server.xml端口8443443,並添加證書文件信息,修改見下面標註部分

[root@master ~]# vim /usr/local/tomcat/conf/server.xml

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

          maxThreads="150" SSLEnabled="true">

   <SSLHostConfig>

      <Certificate certificateKeystoreFile="/usr/local/tomcat/ssl/tomcat.keystore"

                certificateKeystoreType="JKS" certificateKeystorePassword="123456" />

   </SSLHostConfig>

</Connector>

…………………………………………………..

<Engine name="Catalina" defaultHost="localhost">  

將這裏的localhost修改爲添加解析的域名即可,且必須與證書的通用名稱保持一致

說明:certificateKeystoreFile 證書文件存放位置

      certificateKeystoreType 證書文件類型

      certificateKeystorePassword  證書的密碼

4.4、重啓tomcat服務並查看端口

[root@master ~]# catalina.sh stop

[root@master ~]# catalina.sh start

[root@master ~]# ss -ant|egrep "443|80"

LISTEN     0      100         :::8009                    :::*                 

LISTEN     0      100         :::8080                    :::*                 

LISTEN     0      100         :::443                     :::*      

4.5、瀏覽器測試

瀏覽器輸入地址:https://192.168.10.10

image.png

image.png

可以看到我們的https配置完成,下面我們配置http自動跳轉到https

5、配置HTTP自動跳轉到HTTPS

上面我們實現了HTTPS訪問,但是客戶使用http訪問,還是會走http協議,依然是不安全的,沒有達到我們的需求,下面配置HTTP自動跳轉到HTTPS

5.1、修改web.xml文件

web.xml文件中</welcome-file-list>後面,也就是倒數第二行裏,加上如下配置:

<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>

 

5.2、修改sever.xml文件

修改非SSL連接器的請求跳轉到SSL連接器上,修改如下配置:

原來爲:

    <Connector port="8080" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443" />

修改爲:

    <Connector port="80" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="443" />

1、將默認8080端口修改爲80端口,訪問時就不需要加8080端口了,因爲HTTP協議默認走的是80端口

2、將8443端口修改爲443端口,意思是來自80端口的請求都跳轉至443端口

5.3、重啓tomcat服務並查看端口

[root@master ~]# catalina.sh stop

[root@master ~]# catalina.sh start

[root@master ~]# ss -ant|egrep "80|443"

LISTEN     0      100         :::8009                    :::*                 

LISTEN     0      100         :::80                      :::*                 

LISTEN     0      100         :::443                     :::*        

 

5.4、使用Linux中的curl命令測試

這裏在Linux中展示跳轉更爲直觀。

[root@master ~]# curl -I http://192.168.10.10

HTTP/1.1 302

Cache-Control: private

Expires: Thu, 01 Jan 1970 08:00:00 CST

Location: https://192.168.10.10/

Transfer-Encoding: chunked

Date: Wed, 15 Aug 2018 16:38:51 GMT

到這裏,Tomcat配置HTTP自動跳轉HTTPS就已經完成了


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