Let'sEncrypt是一個(gè)免費(fèi)SSL證書(shū)發(fā)行項(xiàng)目,發(fā)行的證書(shū)已經(jīng)獲得主流瀏覽器的支持。
這里說(shuō)如何使用Let'sEncrypt獲得免費(fèi)SSL證書(shū),配置apache的SSL功能,請(qǐng)求轉(zhuǎn)發(fā)到Tomcat并且訪問(wèn)HTTP的請(qǐng)求的時(shí)候自動(dòng)跳轉(zhuǎn)至HTTPS請(qǐng)求。
下列全部操作都是在centos6.8阿里云機(jī)器上測(cè)試通過(guò)的。
說(shuō)的有不明白的,建議事先網(wǎng)上了解下。
我這里有配置好的樣子,這個(gè)地方通過(guò)Apache轉(zhuǎn)發(fā)到Tomcat,配置的有SSL證書(shū)以及訪問(wèn)HTTP時(shí)自動(dòng)跳轉(zhuǎn)至HTTPS,這里直接訪問(wèn) s.hanyz.cn 自動(dòng)跳轉(zhuǎn):

大致步驟:
- 準(zhǔn)備好一個(gè)域名,解析到你的公網(wǎng)服務(wù)器(我的是s.hanyz.cn)
- 安裝Let'sEncrypt
- 安裝及配置Apache
- 給準(zhǔn)備的域名生成ssl證書(shū)文件
- tomcat環(huán)境配置好(我這里準(zhǔn)備的一個(gè)項(xiàng)目名叫kind_editor測(cè)試使用)
- 給Apache設(shè)置HTTP請(qǐng)求轉(zhuǎn)發(fā)至HTTPS
一、安裝Let'sEncrypt
進(jìn)入到一個(gè)目錄下,在當(dāng)前目錄下載Let's Let'sEncrypt。
wget -p ./ https://github.com/certbot/certbot
下載完是一個(gè)文件夾名稱為certbot的。
cd certbot進(jìn)入目錄,執(zhí)行命令,Let's Let'sEncrypt會(huì)自己安裝。
./letsencrypt-auto --help
二、安裝配置Tomcat(事先配置好JDK)
- 下載安裝包(略)。
- 解壓(略)。
三、安裝Apache
安裝
yum install httpd
配置ssl需要先按照ssl
yum install mod_ssl
安裝完可以先啟動(dòng)一些Apache,看安裝好了沒(méi)。
Apache啟動(dòng)
service httpd start
啟動(dòng)完成后,地址欄上輸入公網(wǎng)IP地址,則會(huì)跳轉(zhuǎn)到Apache的首頁(yè)。
提示:
Apache 啟動(dòng): service httpd start
Apache 停止: service httpd stop
Apache 重啟: service httpd restart
Apache 配置文件: /etc/httpd/conf/httpd.conf
Apache ssl模塊的配置文件: /etc/httpd/conf.d/ssl.conf
四、配置Apache
配置Apache在http協(xié)議基礎(chǔ)上使用ProxyPass轉(zhuǎn)發(fā)URL到Tomcat
通俗的說(shuō)就是:我們使用Apache的請(qǐng)求轉(zhuǎn)發(fā)功能,轉(zhuǎn)發(fā)到哪?轉(zhuǎn)發(fā)到Tomcat 下。
在 httpd.conf 文件里面加入以下代碼:
NameVirtualHost *:80
<VirtualHost *:80>
ProxyPreserveHost On
ServerName s.hanyz.cn
ProxyPass / http://localhost:8080/
ErrorLog logs/error_log
CustomLog logs/access_log common
RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
RewriteLog /var/log/httpd/rewrite.log
RewriteLogLevel 10
</VirtualHost>
ServerName: 配置的是你的需要訪問(wèn)的域名。
ProxyPass: 你想能通過(guò)這個(gè)域名要訪問(wèn)到Tomcat下的什么項(xiàng)目。
Rewrite: 這些開(kāi)頭是配置將http協(xié)議的請(qǐng)求自動(dòng)跳轉(zhuǎn)到https協(xié)議。
這個(gè)地方不說(shuō)tomcat怎么配置域名綁定,百度一搜就知道。就在Host下配置一個(gè)就行了。
<Context path="" docBase="/你的tomcat的webapp的路徑/你的項(xiàng)目名" reloadable="true" />
然后就到了配置SSL了,它來(lái)實(shí)現(xiàn)http自動(dòng)轉(zhuǎn)換成https協(xié)議。
ProxyPass /test http://localhost:8080/examples
ProxyPassReverse /test http://localhost:8080/examples
ProxyPass /docs http://localhost:8080/docs
ProxyPassReverse /docs http://localhost:8080/docs
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
第一個(gè)是當(dāng)我訪問(wèn) s.hanyz.cn/test 的時(shí)候,自動(dòng)跳轉(zhuǎn)到 https://s.hanyz.cn/test ,那Apache會(huì)給指向到 http://localhost:8080/examples 下,也就是Tomcat下的 examples 目錄
我這里是事先已經(jīng)配置好了證書(shū),所以是帶綠鎖的。
如下圖所示是通過(guò)Apache請(qǐng)求轉(zhuǎn)發(fā)了的:

下面是主動(dòng)通過(guò)tomcat訪問(wèn)到的,效果是一樣的:

到這個(gè)地方基本完成了那些呢?
- Apache配置請(qǐng)求轉(zhuǎn)發(fā)。
- 自動(dòng)跳轉(zhuǎn)到https請(qǐng)求。
下面就是給域名簽名獲取免費(fèi)的SSL證書(shū)了。
五、給域名生成證書(shū)
修改ssl.conf,將<VirtualHost *:443>標(biāo)簽中 #ServerName www.example.com:443 前邊的#去掉,域名改為自己的域名,Let's Let'sEncrypt生成的證書(shū)就是綁定這個(gè)域名的 。
Let's Let'sEncrypt支持3種認(rèn)證方式
--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的認(rèn)證方式,命令如下:
cd certbot進(jìn)入目錄:
./letsencrypt-auto --apache --apache-le-vhost-ext /etc/httpd/conf.d/ssl.conf --register-unsafely-without-email
這個(gè)地方需要注意的是可能會(huì)有的坑:
確保公網(wǎng)服務(wù)器有開(kāi)放安全組的端口,除了服務(wù)器上 iptables 設(shè)置了,阿里云或騰訊云上管理控制臺(tái)上也需要手動(dòng)開(kāi)放端口。
不然在敲完上面的命令以后,生成證書(shū)的時(shí)候,安全組的安全設(shè)置導(dǎo)致域名沒(méi)有開(kāi)發(fā)443端口,就會(huì)出現(xiàn)下面的錯(cuò)。

類型那里說(shuō)是: 未知的Host ,一開(kāi)始也覺(jué)得奇怪,ping通了呀,為啥生成配置文件就錯(cuò)誤了呢,后來(lái)突然想到了443端口是否被限了。
然后敲完上面這個(gè)命令以后,Let'sEncrypt 會(huì)問(wèn)你給哪個(gè)域名配置證書(shū), 選擇數(shù)字對(duì)應(yīng)自己設(shè)置的域名 (也就是之前ssl.conf中設(shè)置的域名)。
選擇完數(shù)字,還有一個(gè)選項(xiàng) ,選擇對(duì)應(yīng)數(shù)字就行了。
最后生成成功以后, 有個(gè) 祝賀的xxx 英文單詞一堆,就沒(méi)細(xì)看了,知道是生成ssl證書(shū)成功了。
下面是ssl證書(shū)生成完的路徑
/etc/letsencrypt/live/www.example.com/
Let's Let'sEncrypt會(huì)自動(dòng)修改ssl.conf文件,關(guān)聯(lián)證書(shū)

ssl證書(shū)也有了,再通過(guò)地址訪問(wèn)的時(shí)候,就會(huì)出現(xiàn)小綠鎖了,并且Apache能轉(zhuǎn)發(fā)Tomcat的請(qǐng)求。
我的博客文章地址:http://www.hanyz.cn/2017/07/01/Let-sEncrypt-Apache-Tomcat%E5%AE%9E%E7%8E%B0%E5%85%8D%E8%B4%B9HTTPS/