Tomcat9配置HTTP/2访问

1 概述

TomcatTomcat8的一些较新版本就支持HTTP/2了,Tomcat9直接支持,本文讲述了如何利用一个简单的开源工具mkcert生成证书并利用该证书配置HTTP/2访问。

2 使用mkcert生成证书

网上大部分的教程都是使用OpenSSL生成根证书,客户端证书以及服务端证书的,一堆参数配置非常复杂,因此这里使用一个简单的一键生成本地证书的开源工具mkcert,无需任何配置。

2.1 安装mkcert

2.1.1 MacOS

brew install mkcert
brew install nss # 如果使用火狐

使用MacPorts

sudo port selftupdate
sudo port install mkcert
sudo port install css # 如果使用火狐

2.1.2 Linux

需要先安装certutil

#Debian/Ubuntu
sudo apt install libnss3-tools
#Red Hat/Fedora/CentOS
sudo yum install nss-tools
#Arch/Manjaro
sudo pacman -S nss
#SUSE
sudo zypper install mozilla-nss-tools

使用LinuxBrew安装:

brew install mkcert

安装LinuxBrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

Arch系可以使用pacman安装:

sudo pacman -Syu mkcert

或者从源码安装(需要Go环境):

git clone https://github.com/FiloSottile/mkcert && cd mkcert
go build -ldflags "-X main.Version=$(git describe --tags)"

或者使用已构建好的版本

2.1.3 Windows

安装Chocolatey(以管理员运行PowerShell):

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

或安装Scoop(管理员PowerShell):

Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')
# 或
iwr -useb get.scoop.sh | iex

使用ChocolateyScoop安装:

choco install mkcert
#或
scoop bucket add extras
scoop install mkcert

或者使用已构建好的版本

2.2 生成证书

mkcert的命令非常简单,可以使用--help查看帮助:

mkcert --help

2.2.1 安装本地CA证书

mkcert -install

默认会在~/.local/share/mkcert生成CA证书。

2.2.2 利用CA证书签发本地证书

mkcert localhost

其中localhost表示签发本地证书,可以换成example.com*.example.comexample.test127.0.0.1::1之类的域名或者IP。

执行后会在当前文件夹下生成localhost-key.pemlocalhost.pem,前者是私钥,后者是证书。

3 配置Tomcat

Tomcat可以通过两种方式配置HTTP/2,一种是自带的Nio方式,另一种是使用额外库APRAPR-utilTC-Native的方式。

3.1 使用Nio

通过Nio配置HTTP/2需要结合OpenSSLkeytool将证书转换为pkcs#12再转换为jks

openssl pkcs12 -export -inkey localhost-key.pem -in localhost.pem -out localhost.p12

会提示输入导出密码,需要记住,转换成jks时需要用到。

在这里插入图片描述

接着转换为jks

keytool -importkeystore -srckeystore localhost.p12 -srcstoretype pkcs12 -destkeystore localhost.jks

这里会提示输入目标keystore与源keystore的密码,目标keystore密码一会在修改server.xml时需要用到,源keystore密码就是上面的导出密码。

在这里插入图片描述

接着复制localhost.jksTomcatconf下并修改server.xml

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
	<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="conf/localhost.jks"
       				 certificateKeystorePassword="111111"
                     type="RSA" />
    </SSLHostConfig>
</Connector>

添加了升级协议(默认HTTP/1.1):

<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />

另外certificateKeystorePassword是上一步的目标keystore的密码。

完成后开启Tomcat并访问https://localhost:8443

在这里插入图片描述

在这里插入图片描述

4.2 使用APR

使用APR不需要对证书进行额外的转换,但是需要安装三个库:

笔者的Manjaro可以直接包管理器安装:

sudo pacman -S apr apr-util tomcat-native

其他系统请自行使用包管理器或者按上面的官网链接进行编译安装。

复制localhost-key.pemlocalhost.pemTomcatconf目录下,并修改server.xml

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" >
    <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
    <SSLHostConfig>
        <Certificate certificateKeyFile="conf/localhost-key.pem"
                     certificateFile="conf/localhost.pem"
                     type="RSA" />
    </SSLHostConfig>
</Connector>

开启Tomcat后就可以访问https://localhost:8443了:

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值