本文介紹如何爲CentOs下Apache服務器上的網站配置SSL證書。包括兩種情況:
1)爲在Apache上運行的網站配置SSL;
2)爲Apache反向代理的Tomcat網站配置SSL。
實現以上兩項後,本文也自然包含了爲Apache下多個VirtualHost分別配置SSL的方法。
Apache如何反向代理Tomcat 參見
小白指南:CentOs下配置Apache 反向代理Tomcat
環境:
服務器:阿里雲CentOs7
Apache version :2.6.4
Tomcat version: 8.5.45
前提
待配置ssl的網站可以正常訪問。
1、購買並申請SSL證書
通過阿里雲SSL證書服務購買並申請免費SSL證書,每個SSL證書對應一個二級域名。我購買了兩個:
www.test.cn:對應Apache上的網站。
level2.test.cn:對應Tomcat上的網站。
下載SSL相關文件下載到本地,是一個壓縮包,包內有三個文件(以www.test.cn爲例):
1234567_www.test.cn.key
1234567_www.test.cn_chain.crt
1234567_www.test.cn_public.crt
2、安裝ssl模塊
默認Apache是沒有安裝SSL模塊的,使用命令安裝:
yum install -y mod_ssl
3、打開443端口
在阿里雲ECS控制檯上配置安全規則組,監聽443端口。
4、上傳ssl文件
服務器 httpd 目錄下新建子目錄ssl:
mkdir ssl
把三個SSL文件上傳到ssl目錄。如何上傳看 這裏第3.2小節。
5、配置www.test.cn的SSL
1)修改ssl.conf文件
vi /etc/httpd/conf.d/ssl.conf
找到下面內容,把 DocumentRoot 和 ServerName 改成自己網站的對應內容
<VirtualHost _default_:443>
# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html/test"
ServerName www.test.cn:443
繼續向下,找到這三行:修改爲自己的對應文件路徑和名稱。
SSLCertificateFile /etc/httpd/ssl/1234567_www.test.cn_public.crt
……
SSLCertificateKeyFile /etc/httpd/ssl/1234567_www.test.cn.key
……
SSLCertificateChainFile /etc/httpd/ssl/1234567_www.test.cn_chain.crt
……
修改完畢後保存並退出。到此配置就完成了,不過我們可能還希望當用戶用http://訪問網站時,自動跳轉到https訪問。
2)http強制跳轉https
修改vhost-name.conf
vi /etc/httpd/vhost-conf.d/vhost-name.conf
找到:
<VirtualHost *:80>
DocumentRoot /var/www/html/test
ServerName http://www.test.cn
</Virtualhost>
<Directory /var/www/html/test>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
添加三行內容
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [L,R]
修改完畢後如下:
<VirtualHost *:80>
DocumentRoot /var/www/html/test
ServerName http://www.test.cn
</Virtualhost>
<Directory /var/www/html/test>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [L,R]
</Directory>
保存修改並退出。
重新啓動Apache。瀏覽器輸入www.test.cn可以正常訪問到https://www.test.cn。
6、配置level2.test.cn的SSL
1)上傳文件參見第4步。
2)修改ssl.conf文件
vi /etc/httpd/conf.d/ssl.conf
a. 複製<VirtualHost _default_:443>
中的所有內容並在文件末尾粘貼。
:set number
:16,217 copy 218
上面命令功能:顯示行號,把第16到217行復制到第218行。
把複製的<VirtualHost _default_:443>
修改爲<VirtualHost *:443>
,這將是level2.test.cn的配置內容。
b.找到 DocumentRoot 和 ServerName :
<VirtualHost *:443>
# General setup for the virtual host, inherited from global configuration
#DocumentRoot "/var/www/html/test"
ServerName level2.test.cn:443
ProxyPreserveHost On
ProxyPass / http://tomcatIp:8080/
ProxyPassReverse / http://tomcatIp:8080/
ProxyPreserveHost On
ProxyPass /project-war-name http://tomcatIp:8080/project-war-name
ProxyPassReverse /project-war-name http://tomcatIp:8080/project-war-name
……
修改的內容包括:
註釋DocumentRoot;
修改ServerName 爲level2.test.cn:443;
新增6行內容。
c.繼續向下,找到這三行:修改爲自己的對應文件路徑和名稱。
SSLCertificateFile /etc/httpd/ssl/7654321_level2.test.cn_public.crt
……
SSLCertificateKeyFile /etc/httpd/ssl/7654321_level2.test.cn.key
……
SSLCertificateChainFile /etc/httpd/ssl/7654321_level2.test.cn_chain.crt
……
保存修改並退出。
3)http強制跳轉https
參見5.2),修改完全相同。
重新啓動Apache。
瀏覽器輸入level2.test.cn可以正常訪問https:/level2.test.cn。
瀏覽器輸入level2.test.cn/project-war-name可以正常訪問https:/level2.test.cn/project-war-name。
7、參考文章
https://blog.csdn.net/u010071211/article/details/80106640
https://blog.csdn.net/zy517863543/article/details/82027567
https://www.jb51.net/article/143599.htm
That’s all.Thank you!