阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Tomcat配置HTTPS协议

456次阅读
没有评论

共计 8503 个字符,预计需要花费 22 分钟才能阅读完成。

简介:
SSL 协议的 3 个特性:
保密:通过 SSL 链接传输的数据是加密的
鉴别:通信双方的身份鉴别,通常是可选的,但至少有一方需要验证(通常是服务端)

完成性:传输数据的完整性检查

从性能角度考虑,加密是一项计算昂贵的处理,因此尽量不要讲整个 Web 采用 SSL 链接,实际部署中,选择有必要进行安全加密的页面(如存在敏感信息传输的页面)采用 SSL 通信。

接下来相信介绍一下如何在 Tomcat 中添加 SSL 支持。

注意:
配置 Tomcat 以支持 SSL 通常只在其作为独立的 web 服务器时才有必要。当 Tomcat 作为 servlet 容器运行与 Web 服务器后端时,只需要配置前置的 Web 服务器支持 SSL 即可。Web 服务器负载所有的 SSL 相关处理,Tomcat 接收到的请求为解密后的数据,而且返回的响应也是明文,有 Web 服务器完成加密。

Tomcat 实现 SSL 两种方式:
一种是 JSSE,另一种是 APR(默认的 OpenSSL 引擎)。

JSSE 适用于 BIO、NIO、NIO2 链接器(8.5 版本之后,NIO、NIO2 同时支持 OpenSSL,以用于 HTTP/2.0),APR 适用于 APR 链接器。由于 JSSE 和 APR 配置有明显区别,因此我们最好在 Connector 的 protocol 属性中明确指定链接器的类名,而非协议名(如 HTTP/1.1),否则,Tomcat 会自动按照本地配置构造 connector(如果安装了 APR,则适用 APR 链接器,否则使用 NIO 链接器),这样可能导致 SSL 不可用。

方法一(简单粗暴)
在为 Tomcat 添加 SSL 配置之前,我们需要先创建一个秘钥库。Tomcat 支持秘钥库有 JKS、PKCS11 和 PKCS112。JKS 是 Java 标准的秘钥库格式,由 keytool 命令行工具创建,该工具位于 $JAVA_HOME/bin/ 目录下。

1 创建秘钥库
执行命令如下:

Windows(文件存放于 C:\cert 目录,存放路径也可自己定义):

keytool -genkey -alias tomcat -keyalg RSA -keystore C:\cert\mykey.key.storeLinux(文件存放于 /home/liugr/cert 目录,存放路径也可自己定义):

keytool -genkey -alias tomcat -keyalg RSA -keystore /home/liuge/cert/mykey.keystore?

Enter keystore password: 输入秘钥库口令
Re-enter new password: 再次输入新口令
What is your first and last name? 您的姓氏是什么
[Unknown]: Tomcat
What is the name of your organizational unit? 您的单位名称
[Unknown]: Apache
What is the name of your organization? 您的组织名称
[Unknown]: Apache
What is the name of your City or Locality? 省份
[Unknown]: Beijing
What is the name of your State or Province? 城市
[Unknown]: Beijing
What is the two-letter country code for this unit? 国家代码
 [Unknown]: CN
Is CN=Tomcat, OU=Apache, O=Apache, L=Beijing, ST=Beijing, C=CN correct? 信息是否正确
[no]: y
 
Enter key password for <tomcat>                输入 Tomcat 的秘钥口令
    (RETURN if same as keystore password): 如果和秘钥库口令相同,按回车
 Re-enter new password:

2 配置 server.xml 文件
秘钥库密码将在 server.xml 配置是用到,其他信息作为基本信息,客户端可以通过浏览器查看。命令执行成功后,将生成的 mykey.keystore 复制到 Tomcat 的 conf 目录下。将默认注释的 SSL 链接器取消注释

8.5 版本配置如下(server.xml 的 88 行)

<Connector port=”8443″ protocol=”org.apache.coyote.http11.Http11NioProtocol”
maxThreads=”150″ scheme=”https” secure=”true” SSLEnabled=”true”>
<SSLHostConfig>
<Certificate certificateKeystoreFile=”conf/mykey.keystore”
certificateKeystorePassword=”123456″ ## 秘钥库口令
type=”RSA” />
</SSLHostConfig>
</Connector>

链接器的 protocol 设置为 org.apache.coyote.http11.Http11NioProtocol,以避免 Tomcat 自动选择 HTTP 链接器实现(当然,可以根据需要改为 NIO2 的实现,不能选择 APR)

CertificateKeystorePassword 为创建秘钥库是填写的秘钥库文件,port 为 SSL 链接器端口,如果要修改为其他端口,必须确保与无 SSL 得 HTTP 链接器的 redirectPort 属性一致。

启动 Tomcat,在浏览器中输入 https://ip:8443,浏览器会弹出证书提示,接收后才会进入页面,而且通过浏览器还可以查看证书信息。

方法二
除此以上方法之外,我们还可以通过 OpenSSL 创建证书并导入到秘钥库。

注意:绝大多数 Linux 系统以及默认安装了 OpenSSL,Windows 系统中,如果你安装了 Apache 服务器,那样也可以在安装目录的 bin 文件夹下找到 openssl.exe 可执行文件。

OpenSSL 的命令格式都是 “openssl 命令 命令参数 ” 的形式。

1 执行以下命名生成根秘钥:
[root@ ~]# openssl genrsa -out rootkey.pem 2048 输出如下:

Generating RSA private key, 2048 bit long modulus
………………+++
…..+++
e is 65537 (0x10001)2 创建根证书(用根证书来签发服务器端请求文件):
[root@ ~]# openssl req -x509 -new -key rootkey.pem -out root.crt 输出如下:

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:Apache
Organizational Unit Name (eg, section) []:Tomcat
Common Name (eg, your name or your server’s hostname) []:Tomcat
Email Address []:tomcat@apache.com

根据提示,需要输入国家、省份、城市、以及公司信息等。

3 创建服务器秘钥:
[root@ ~]# openssl genrsa -out serverkey.pem 2048

输出如下:

Generating RSA private key, 2048 bit long modulus
……………………………………………………+++
…………………………..+++
e is 65537 (0x10001)

4 生成服务器端证书的请求文件:
[root@ ~]# openssl req -new -key serverkey.pem -out server.csr

输出如下:

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:Apache
Organizational Unit Name (eg, section) []:Tomcat
Common Name (eg, your name or your server’s hostname) []:Tomcat
Email Address []:tomcat@apache.com
 
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []:Tomcat
同样,根据提示,需要输入国家、省份、城市等信息。

5 用根证书来签发服务器端请求文件,生成服务器端证书:
[root@ ~]# openssl x509 -req -in server.csr -CA root.crt -CAkey rootkey.pem -CAcreateserial -days 3650 -out server.crt

输出如下:
Signature ok
subject=/C=CN/ST=Beijing/L=Beijing/O=Apache/OU=Tomcat/CN=Tomcat/emailAddress=tomcat@apache.comf\x08
Getting CA Private Key

以上我们创建的是自签名证书,多用于开发测试环境。在生产中,我们需要向数字证书颁发机构(CA)提交请求文件(server.csr),CA 则返回给我们数字证书。这个过程一般是要收费的。

6 将证书导出为 pkcs12 格式:
[root@ ~]# openssl pkcs12 -export -in server.crt -inkey serverkey.pem -out server.pkcs12

输出如下:

Enter Export Password:

Verifying – Enter Export Password:

根据提示输出一个导出密码

7 执行 keytool 命令生成服务端秘钥库:
[root@ ~]# keytool -importkeystore -srckeystore server.pkcs12 -destkeystore mykey.keystore -srcstoretype pkcs12

输出如下
Importing keystore server.pkcs12 to mykey.keystore…
Enter destination keystore password:
Enter source keystore password:
Entry for alias 1 successfully imported.
Import command completed: 1 entries successfully imported, 0 entries failed or cancelled

根据提示输入秘钥库密码已经上一步的导出密码。

至此,我们创建了一个 mykey.keystore 秘钥库文件

这半天创建的相关文件如下

[root@ ~]# ll
total 36
-rw-r–r–. 1 root root 4461 Apr 16 16:41 mykey.keystore
-rw-r–r–. 1 root root 1407 Apr 16 16:21 root.crt
-rw-r–r–. 1 root root 1679 Apr 16 16:14 rootkey.pem
-rw-r–r–. 1 root root 17 Apr 16 16:31 root.srl
-rw-r–r–. 1 root root 1289 Apr 16 16:31 server.crt
-rw-r–r–. 1 root root 1110 Apr 16 16:28 server.csr
-rw-r–r–. 1 root root 1675 Apr 16 16:26 serverkey.pem
-rw-r–r–. 1 root root 2517 Apr 16 16:37 server.pkcs12

8 通过 keytool 的 list 命令,可以查看其包含的证书信息:
根据提示输入秘钥库密码后,既输出秘钥库包含的证书信息

[root@ ~]# keytool -list -v -keystore mykey.keystore 输出如下:

Enter keystore password:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 2 entries
Alias name: tomcat
Creation date: Apr 16, 2018
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Tomcat, OU=Apache, O=Apache, L=Beijing, ST=Beijing, C=CN
Issuer: CN=Tomcat, OU=Apache, O=Apache, L=Beijing, ST=Beijing, C=CN
Serial number: 5f59c5e3
Valid from: Mon Apr 16 15:36:30 CST 2018 until: Sun Jul 15 15:36:30 CST 2018
Certificate fingerprints:
    MD5: 0E:FB:D2:73:54:89:51:9A:20:96:E8:22:2B:92:36:B6
    SHA1: 2C:DF:97:E9:88:85:72:0E:15:68:B1:09:19:76:7E:67:FC:A7:F9:12
    SHA256: EE:42:E8:96:CE:E1:B5:A6:2C:EC:57:82:44:3A:A8:AD:A3:89:04:01:C8:E8:85:7D:CA:96:B4:E4:63:87:91:49
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3
Extensions:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 3A 8F 05 4C 85 6D 2F EE 1E E6 46 ED AD CC CA A6 :..L.m/…F…..
0010: 06 78 A7 CA .x..
]
]
*******************************************
*******************************************
Alias name: 1
Creation date: Apr 16, 2018
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: EMAILADDRESS=tomcat@apache.com, CN=Tomcat, OU=Tomcat, O=Apache, L=Beijing, ST=Beijing, C=CN
Issuer: EMAILADDRESS=tomcat@apache.com, CN=Tomcat, OU=Tomcat, O=Apache, L=Beijing, ST=Beijing, C=CN
Serial number: 84802670058ff7d5
Valid from: Mon Apr 16 16:31:46 CST 2018 until: Thu Apr 13 16:31:46 CST 2028
Certificate fingerprints:
    MD5: 46:F0:86:8A:FB:60:2E:AA:14:E5:AF:7F:8B:05:A2:F5
    SHA1: EF:3E:90:08:0D:9E:53:95:4E:4F:36:29:78:05:93:E1:DB:48:CB:A2
    SHA256: 8E:B7:51:6D:04:09:24:28:20:68:4F:C3:2A:2E:47:1E:B8:F6:C2:87:D1:55:30:8C:B0:2A:EA:2A:02:8B:09:76
Signature algorithm name: SHA1withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 1

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

Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using “keytool -importkeystore -srckeystore mykey.keystore -destkeystore mykey.keystore -deststoretype pkcs12”.

9 将 mykey.keystore 秘钥库文件按照前文说明的方式部署到 Tomcat 中(非 APR 链接器)。通过浏览器可查看证书信息。
10 如果在 APR 链接器配置 SSL,首先需要在 server.xml 的 <Server> 下添加监听器 AprLifecycleListener:
<Listener className=”org.apache.catalina.core.AprLifecycleListener” SSLEngine=”on”

SSLRandomSeed=”builtin” userAprConnector=”true” />

说明:userAprConnector 为 8.5 版本新属性,用于启用 Apr Connector,8.5 版本之前不必配置,默认自动启用

然后,添加 SSL 链接器配置如下(Tomcat8.5):

<Connector port=”8443″
  protocol=”org.apache.coyote.http11.Http11NioProtocol”
maxThreads=”150″ scheme=”https” secure=”true” SSLEnabled=”true”>
<SSLHostConfig>
  <Certificate certificateKeystoreFile=”${catalina.base}/conf/serverkey.pem”
  certificateFile=”${catalina.base}/conf/serverkey.crt”
  type=”RSA” />
</SSLHostConfig>
</Connector>

certificateKeystoreFile 用于配置服务器端秘钥

certificateFile 用于配置服务器端证书

至此配置完成

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计8503字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7997251
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...
如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024 程序员】我劝你赶紧去免费领一个 AWS、华为云等的主机 每年 10 月 24 日,程序员们都会迎来...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...