Let's Encrypt+Apache+Tomcat实现免费HTTPS


Let's Encrypt是一个免费SSL证书发行项目,发行的证书已经获得主流浏览器的支持,亲测谷歌浏览器(桌面版)、火狐浏览器(桌面版)、UC浏览器(手机版)、360浏览器(手机版)支持,其它的暂没测试;

本文讲解如何使用Let's Encrypt获得免费SSL证书,配置apache的SSL功能,并将请求转发到tomcat

大致思路如下:

    1.使用Let's Encrypt获得SSL证书

    2.开启apache的SSL功能,用户请求首先到apache,使用http协议或者https协议

    3.apache将请求转发到tomcat上,使用http协议或者ajp协议

这样做的原因有以下几点:

    1.我的网站是java编写的,需要一个类似于tomcat的servlet容器

    2.虽然tomcat也支持ssl,但Let's Encrypt原生支持apache,所以在apache上配置ssl比较简单

    3.apache处理静态资源的能力 比tomcat好

    4.可以配置多个tomcat实现负载均衡,可以在不终止服务的情况下重启tomcat

一、安装Let's Encrypt

    Let's Encrypt的项目主页是 https://github.com/certbot/certbot ,可以使用git下载,也可以到主页直接下载ZIP压缩包

    进入文件夹中,执行如下命令,之后Let's Encrypt会安装一些软件

./letsencrypt-auto --help

二、安装apache

     在CentOS7中安装apache的命令

yum install httpd

      在centos7中安装apache的ssl模块

yum install mod_ssl

     在Ubuntu中安装apache

sudo apt-get install apache2

三、安装tomcat

     到官网下载一个tomcat,解压就能用,当然先要装jre

四、配置apache

     我安装的版本是2.4.6,这个版本的配置和其它版本不太一样

     在centos7中apache配置文件的路径是/etc/httpd/conf/httpd.conf , ssl模块的配置文件的路径是/etc/httpd/conf.d/ssl.conf

     在ubuntu中apache配置文件的路径是/etc/apache2/apache2.conf

     修改httpd.conf文件

        添加如下代码,功能是将http协议的请求自动跳转到https协议

RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

     修改ssl.conf文件

         将Listen 443 https 删掉,不然会和后边的虚拟主机配置冲突

         将<VirtualHost *:443>标签中#ServerName www.example.com:443 前边的#去掉,域名改为自己的域名,Let's Encrypt生成的证书就是绑定这个域名的,我试过改成ip后,Let's Encrypt不支持

         在<VirtualHost *:443>标签中添加以下代码, 功能是将所有请求转发到tomcat服务器 ,这里用的是ajp协议,如果想用http协议,将ajp改为http,8009改为8080   

ProxyVia On
ProxyRequests Off
ProxyPass / ajp://127.0.0.1:8009/
ProxyPassReverse / ajp://127.0.0.1:8009/
<Proxy *>
 Require all granted
</Proxy>
<Location />
 Require all granted
</Location>

    配置文件改好后,使用httpd -t命令检查配置文件是否有错误,没错误的话,就可以使用service httpd start启动服务

     启动服务的时候还出了一个错误:AH00558: httpd: Could not reliably determine the server's fully qualified domain name,将httpd.conf中#ServerName localhost:80的#去掉,localhost改为实际的ip就好了

 五、生成证书

   Let's Encrypt支持3种认证方式 

    --apache          Use the Apache plugin for authentication & installation

    --standalone      Run a standalone webserver for authentication  

    --webroot         Place files in a server's webroot folder for authentication

   这里使用apache的认证方式,命令如下,

./letsencrypt-auto --apache --apache-le-vhost-ext /etc/httpd/conf.d/ssl.conf --register-unsafely-without-email 

  --apache-le-vhost-ext参数指定配置虚拟主机的配置文件;--register-unsafely-without-email参数是忽略邮箱,如果没有这个参数,Let's Encrypt会要求输入邮箱,我输入foxmail邮箱,却提示无效,不知道为什么

  证书生成后会放在/etc/letsencrypt/live/www.example.com/目录中,Let's Encrypt会自动修改ssl.conf文件,关联证书

六、运行apache、tomcat

  运行tomcat并输出日志

cd /etc/tomcat
sh bin/startup.sh;tail -f logs/catalina.out

  运行apache

service httpd start

七、其它

   总的来说配置过程很简单,但对于没做过的人来说却很困难。比如说我就花了一周多时间研究这个,网上的资料和我电脑上总是有些差异,文件路径不对啊,有些配置项没有啊什么的。我先在自己的ubuntu上搞的,弄了几天也不行,只好放弃治疗,直接在服务器上的centos上搞,结果一天就弄好了,呵呵!

本文永久更新链接地址

相关内容