使用 Lets-encrypt 为 Tomcat 配置 https

Let’s Encrypt 简介

Let's Encrypt 由互联网安全研究小组(缩写 ISRG )提供服务。主要赞助商包括电子前哨基金会、Mozilla 基金会、Akamai 以及思科。2015年4月9日,ISRG 与 Linux 基金会宣布合作。
用以实现新的数字证书认证机构的协议被称为自动证书管理环境(ACME)。GitHub 上有这一规范的草案,且提案的一个版本已作为一个 Internet 草案发布。Let's Encrypt 宣称这一过程将十分简单、自动化并且免费

Certbot 简介

Certbot 为 Let’s Encrypt 项目发布了一个官方的客户端 Certbot ,利用它可以完全自动化的获取、部署和更新安全证书,并且 Certbot 是支持所有 Unix 内核的操作系统。

最近打算给公司所有的域名都配置上 https 服务,开始配置了几个 nginx 服务的都比较顺利,嗯,Certbot 真好用。直到遇到一台 Centos6 + Tomcat7 + openjdk1.7 的环境(这环境绝了),真香(当然,这与 Certbot 无关)。

更新 epel-release 导致 yum 命令失效

按照 Certbot 官网操作下载 Certbot 客户端:

$ wget https://dl.eff.org/certbot-auto
$ sudo mv certbot-auto /usr/local/bin/certbot-auto
$ sudo chown root /usr/local/bin/certbot-auto
$ sudo chmod 0755 /usr/local/bin/certbot-auto

只要网络没有问题,这一步完全没有问题。接下来 Cerbot 提供了两种使用方式

  1. webroot 方式: certbot 会利用既有的 web server,在其 web root 目录下创建隐藏文件,Let’s Encrypt 服务端会通过域名来访问这些隐藏文件,以确认你的确拥有对应域名的控制权。
  2. standalone 方式: Certbot 会自己运行一个 web server 来进行验证。如果我们自己的服务器上已经有 web server 正在运行 (比如 Nginx 或 Tomcat ,主要是看你的 80 端口有没有被占用),用 standalone 方式的话需要先关掉它,以免冲突

这里我采用了 webroot 方式

$ sudo /usr/local/bin/certbot-auto certonly --webroot

灾难从这里开始。执行该命令提示需要安装epel-release,OK ,小问题。我一个 yum intall 命令下去.....,提示找不到这个包,不慌 yum不行咱换 rpm。顺利使用 rpm 安装 epel-release 包,开心。再次执行 webroot 命令,再次报错需要 Python 版本大于 2.7。稳住,查看一下当前系统Python 版本 ,好吧,当前Pyrhon版本为空,这都是小问题,我一个yum install 命令下去......,WTK ,yum 命令不存在。没关系,我们搜索一下,万能的互联网。这里有一个需要注意的地方,网上给出的 rpm 包的版本可能不是最新的版本,会导致下载不成功。具体的版本以镜像库实际版本为准。

先安装 Python ,rpm包不要一个一个安装,安装包之间有顺序依赖。使用 rpm -ivh python-*一次性安装没有问题

$ mkdir /usr/local/src/python

$ wget  http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/python-2.6.6-66.el6_8.x86_64.rpm
$ wget  http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/python-iniparse-0.3.1-2.1.el6.noarch.rpm
$ wget  http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/rpm-python-4.8.0-59.el6.x86_64.rpm
$ wget  http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/python-devel-2.6.6-66.el6_8.x86_64.rpm
$ wget  http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/python-pycurl-7.19.0-9.el6.x86_64.rpm`
$ wget  http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/python-urlgrabber-3.9.1-11.el6.noarch.rpm
$ wget  http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/python-libs-2.6.6-66.el6_8.x86_64.rpm

$ rpm -ivh python-*   

安装 rpm-python 包时,可能会安装不成功。请使用下面的代码,强制安装,没有问题

$ rpm -i --force --nodeps rpm-python-4.8.0-59.el6.x86_64.rpm

再安装 yum

$ mkdir /usr/local/src/yum
$ wget http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/yum-3.2.29-81.el6.centos.noarch.rpm
$ wget http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
$ wget http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.30-41.el6.noarch.rpm
$ rpm -ivh yum-*

好的,此时我们的 yum 回来了,运行一下 Pyhton 命令。没错,还是可耻的 2.6 版本。没关系我们再来安装 Python2.7

  1. 安装 Development Tools
    $ yum groupinstall "Development tools"
  2. 安装 Python 依赖包
    $ yum  install -y  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel tcl-devel tk-devel
  3. 下载及安装 Python 2.7.12
    $ cd /opt
    $ wget --no-check-certificate https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz
    $ tar xf Python-2.7.12.tar.xz
    $ cd Python-2.7.12
    $ ./configure --prefix=/usr/local
    $ make && make install
  4. 将 Python 命令指向 Python 2.7.12
    ln -s /usr/local/bin/python2.7 /usr/local/bin/python

    5 检查 Python 版本

    $ pyhton --version
    Python 2.7.12

    6 由于 yum 依赖于 Python 2.6,指定 yum 的 Python 版本依赖

    $ whereis  yum
    yum: /usr/bin/yum /etc/yum.conf
    $ vim  /usr/bin/yum

    修改文件第一行为:

    #!/usr/bin/python2.6.6

    至此,环境恢复完毕。
    重新安装 epel-release 环境依赖。

    $ yum install -y epel-release

    使用 webroot 方式生成指定域名证书

    $ cd /usr/local/bin
    $ sudo ./certbot-auto certonly --webroot 

    命令执行成功,会提示你输入需要生成证书的域名(必填)和项目部署的目录(必填)以及邮箱信息(可选Certbot 证书有效期 90 天,到期后向你设置的邮箱发送邮件),输入完信息会生成证书文件。
    生成证书中会创建 /etc/letsencrypt 文件夹, 证书文件默认存放在 /etc/letsencrypt/live/example.com 文件夹中, 其中 example.com 取自第一个域名,在 example.com 文件夹中包含 4 个文件,
    cert.pem 域名证书,
    chain.pem 根证书及中间证书,
    fullchain.pem 由 cert.pem 和 chain.pem 合并而成,
    privkey.pem 证书私钥。

创建一个 2048 位的 Diffie-Hellman 文件 (nginx 默认使用 1024 位的 Diffie–Hellman 进行密钥交换, 安全性太低)

openssl dhparam -out /etc/letsencrypt/live/dhparams.pem 2048

Tomcat 需要使用 .jks 格式的证书文件,进入证书所在目录使用 keytool 工具生成 .jks 证书

$ cd /etc/letsencrypt/live/example.com
$  openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out fullchain_and_key.p12 -name tomcat

这里要求设置密码 yourPassword,下面生成证书时会用到。

$ keytool -importkeystore -deststorepass 'yourPassword' -destkeypass 'yourPassword' -destkeystore MyDSKeyStore.jks -srckeystore fullchain_and_key.p12 srcstoretype PKCS12 -srcstorepass 'yourPassword' -alias tomcat

把生成的 MyDSKeyStore.jks 证书文件 复制到 Tomcat 配置目录下。

$ cp  MyDSKeyStore.jks /usr/local/tomcat7/conf

修改或增加 Tomcat 配置

<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />
<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" 
URIEncoding="UTF-8" maxThreads="150" SSLEnabled="true" 
scheme="https" secure="true" clientAuth="false" 
sslProtocol="TLS" 
keystoreFile="/usr/local/tomcat7/conf/MyDSKeyStore.jks" 
keystorePass="yourPassword" 
keyAlias="tomcat" 
keyPass="yourPassword"/>

重启 Tomcat 服务,即可访问 https://example.com

本作品采用《CC 协议》,转载必须注明作者和本文链接
JAVA、PHP、Python、Rust、Go、 没有一样玩的熟。·
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!