Linux + Tomcat 使用 https

本博客内容乃自身使用并收集整理,引用详见脚注

安装环境

Ubuntu 18.04 + Tomcat 9.0.11 + OpenJDK 11

如果你没有安装Tomcat和JDK,请先安装并配置PATH再进行下面的步骤。

获取证书

获取证书教程主要参考 [Certbot官网教程]1

# 添加ppa仓库,并下载Certbot
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-apache 

# 运行之前请务必关掉占用80端口的程序
# 运行apache插件,自动获取证书,运行过程中需要输入邮箱和域名
sudo certbot --apache

运行之后会提示信息:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at......

具体因人而异但大体差不多,你可以去/etc/letsencrypt/live/<你的域名>/目录下找到以下文件:

# 所有文件都是PEM编码的
cert.pem # 服务器证书
chain.pem # 包含Web浏览器验证服务器证书所需的其他中间证书
fullchain.pem # 所有证书,包括服务器证书
privkey.pem # 证书私钥,严密分享,用来确认身份
README

关于证书的详细说明参见Certbot用户指南#证书文件位置

安装Tomcat所需的SSL环境2

1.安装apr

cd /usr/local/src
wget https://mirrors.cnnic.cn/apache/apr/apr-1.6.5.tar.gz
tar -zxvf apr-1.6.5.tar.gz
cd apr-1.6.5/
./configure
make && make install

2.安装apr-util

cd /usr/local/src
wget https://mirrors.cnnic.cn/apache/apr/apr-util-1.6.1.tar.gz
tar -zxvf apr-util-1.6.1.tar.gz
cd apr-util-1.6.1/
./configure
make && make instal

3.配置apr和apr-util环境

vi /etc/profile

# 添加以下两句
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
export LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib
# 保存退出,使用下面命令生效环境变量
source /etc/profile

4.安装OpenSSL

cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.1.1.tar.gz
tar -zxvf openssl-1.1.1.tar.gz
cd openssl-1.1.1/
./configure
make && make instal

5.配置OpenSSL环境

vi /etc/profile

# 添加
export OPENSSL=/usr/local/openssl/bin
export PATH=$PATH:$OPENSSL
# 保存退出,使用下面命令生效环境变量
source /etc/profile

6.安装Tomcat-native

# 虽然Tomcat的bin目录下自带了,但还是从官网下载最新的,避免包丢失重新再来一遍(就是懒。。)
cd /usr/local/src
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-connectors/native/1.2.18/source/tomcat-native-1.2.18-src.tar.gz  
tar -xzxf  tomcat-native-1.2.18-src.tar.gz
cd /tomcat-native-1.2.18-src/native
./configure --with-apr=/usr/local/apr --with-ssl=/usr/local/openssl
make && make install

配置Tomcat2

打开Tomcat配置文件conf/server.xml

<!-- 找到下面这一段 -->
<!--<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"/>
        ...
    </Connector>
-->

<!-- 将其修改为 -->
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" URIEncoding="UTF-8">
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"/>
        <SSLHostConfig>
            <Certificate certificateKeyFile="/etc/letsencrypt/live/<你的域名>/privkey.pem"
                         certificateFile="/etc/letsencrypt/live/<你的域名>/cert.pem"
                         certificateChainFile="/etc/letsencrypt/live/<你的域名>/chain.pem"
                         type="RSA" />
        </SSLHostConfig>
</Connector>

<!-- 找到下面这一段,有可能还是8080端口,因为之前没改过,你可以继续使用或者改为80端口 -->
<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

<!-- 将其修改为并保存退出 -->
<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443" />

打开Tomcat的conf/web.xml,在web.xml最后面加入下面并保存退出

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

启动Tomcat并测试

先关掉Certbot启动的apache

# 列出apache2进程
ps axu|grep apache2

# 根据已列举的pid杀掉进程
kill <pid>

启动tomcat

/usr/local/tomcat/bin/startup.sh

在网页上输入网站地址会自动映射到https网址。

设置自动续期脚本3

letsencrypt的证书生命周期只有90天,所以必须要及时续期,可以手动也可以自动,但是根据懒人原则,这里使用自动执行脚本替代。
新建脚本cronLetencryptRenew.sh

#!/bin/sh
sh /usr/local/tomcat/bin/shutdown.sh
sh certbot renew --quiet
sh /usr/local/tomcat/bin/startup.sh

定时任务

crontab -e

# 在后面追加一行
# 每月1号3点的定时任务
0 3 1 * * /usr/local/cron/cronLetencryptRenew.sh > /usr/local/cron/cronLog.log 2>&1

  1. Certbot ↩︎

  2. Centos + Tomcat 9 + Let’s encrypt 免费 SSL 升级 https(遇到的问题) ↩︎ ↩︎

  3. Tomcat 9 + Let’s encrypt 免费 SSL 升级 https ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值