apache 使用ssl搭建https与tomcat交互
需要建立支持HTTPS的WEB服务器所要做的第一件事就是获得数字证书。数字证书可以在以下任一方法来获得。
1. 准备
在这篇文档中,我们将使用自签名证书。假设CentOS已经安装了Apache Web服务器。我们需要使用OpenSSL生成自签名证书。如果尚未安装OpenSSL,它可以使用yum来安装。
# yum install mod_ssl openssl
安装完毕后,会自动生成 /etc/httpd/conf.d/ssl.conf 文件,下文配置会用到!
2. 生成一个自签名证书
下面的命令可以被用来产生一个自签名的证书。
首先,生成2048位的加密私钥
# openssl genrsa -out server.key 2048
然后,生成证书签名请求(CSR),这里需要填写许多信息,如国家,省市,公司等
# openssl req -new -key server.key -out server.csr
最后,生成类型为X509的自签名证书。有效期设置3650天,即有效期为10年
# openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
生成**流程如下图,供参考
创建证书后,将文件复制到对应的目录。
# cp server.crt /usr/local/apache/conf
# cp server.key /usr/local/apache/conf
3. 配置Apache Web服务器
首先,修改下面的httpd.conf配置文件。仅需配置红色部分 SSLCertificateFile 和 SSLCertificateKeyFile
# vim /usr/local/apache/conf/httpd.conf
### overwrite the following parameters ###
Include conf/extra/httpd-ssl.conf
SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/private/server.key
### The following parameter does not need to be modified in case of a self-signed certificate. ###
### If you are using a real certificate, you may receive a certificate bundle. The bundle is added using the following parameters ###
SSLCertificateChainFile /etc/pki/tls/certs/example.com.ca-bundle
然后,修改extra/http-ssl.conf配置文件
LoadModule ssl_module /etc/httpd/modules/mod_ssl.so
在<VirtualHost _default_:443>下面添加
#https交给jk转发给tomcat
JkMount /* loadbalancer
#证书路径
SSLCertificateFile "/usr/local/apache/conf/server.crt"
#证书key
SSLCertificateKeyFile "/usr/local/apache/conf/server.key"
#serverName必须跟证书的common name一样
ServerName 192.168.0.62:443
最后,重新启动httpd服务使更改生效
# service httpd restart // 或者 /etc/init.d/httpd restart
Web服务器现在可以使用HTTPS
4. 调整虚拟主机
Apache Web服务器可以配置为多个Web站点。这些站点在httpd的配置文件中以虚拟主机的形式定义。例如,让我们假设我们的Apache Web服务器托管站点为proxy.mimvp.com,网站所有的文件都保存在/var/www/html/virtual-web目录。
对于虚拟主机,典型的HTTP配置是这样的。
# vim /usr/local/apache/conf/httpd.conf
取消虚拟主机配置的注释
Include conf/extra/httpd-vhosts.conf
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/virtual-web
ServerName your's common name
</VirtualHost>
我们可以参考上面的配置创建HTTPS虚拟主机。修改配置extra/httpd-vhosts.conf文件
# vim /usr/local/apache/conf/extra/httpd-vhosts.conf
NameVirtualHost *:443
<VirtualHost *:443>
#设置证书路径,前面已经设置,可以不再设置
SSLEngine on
SSLCertificateFile xxx/server.crt
SSLCertificateKeyFile xxx/server.key
#设置目录访问权限,如果已经设置,也可以不用设置
<Directory /var/www/html/virtual-web>
AllowOverride All
</Directory>
ServerAdmin [email protected]
DocumentRoot /var/www/html/virtual-web
ServerName your's common name
</VirtualHost>
需要按照上面的配置,定义每个虚拟主机。添加虚拟主机后,重新启动Web服务。
# service httpd restart
现在的虚拟主机就可以使用HTTPS
5. 强制Apache Web服务器始终使用https
如果由于某种原因,你需要站点的Web服务器都只使用HTTPS,此时就需要将所有HTTP请求(端口80)重定向到HTTPS(端口443)。 Apache Web服务器可以容易地做到这一点。
1,强制主站所有Web使用(全局站点)
如果要强制主站使用HTTPS,我们可以这样修改httpd配置文件:
# vim /usr/local/apache/conf/httpd.conf
ServerName www.example.com:80
Redirect permanent / https://www.example.com
重启Apache服务器,使配置生效:
# service httpd restart
2,强制虚拟主机(单个站点)
如果要强制单个站点在虚拟主机上使用HTTPS,对于HTTP可以按照下面进行配置:
# vim /usr/local/apache/conf/httpd.conf
<VirtualHost *:80>
ServerName proxy.mimvp.com
Redirect permanent / https://proxy.mimvp.com/
</VirtualHost>
重启Apache服务器,使配置生效:
# service httpd restart
单个站点全部使用HTTPS,则 http://proxy.mimvp.com 会强制重定向跳转到 https://proxy.mimvp.com
一般情况下,由于浏览器会自动拦截https未被认证的网址,因此建议同时保留 http://proxy.mimvp.com 和 https://proxy.mimvp.com ,或者购买权威的认证服务,让用户浏览器信任https浏览访问。