本博客内容乃自身使用并收集整理,引用详见脚注
安装环境
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