要让 Apache 支持安全链接,即 https 访问,要有 ssl 证书及 mod_ssl.so 模块.
Apache 及其它服务安装请参考<<CentOS LAMP,vsFTP,smtp 等环境配置详解>>
安装 ssl 模块
1 |
yum install mod_ssl |
安装完成后会在 /etc/httpd/conf.d 目录中多出个 ssl.conf 配置文件.
获取证书
证书可以通过证书工具自行制作, 但自己制作的证书无法通过各大浏览器的检测, 会有安全风险提示. 只有通过证书颁发机构获得的证书才是有效的安全证书. ssl 证书一般都是收费的. 这里提供一个免费获得 ssl 证书的办法.
安装证书
根据上面方法获得了 ssl.crt 证书, 编辑 ssl.conf 配置文件.
1 |
vi /etc/httpd/conf.d/ssl.conf |
设定服务器公用的部分
找到 SSLPassPhraseDialog 项, 如果没有就添加. 这个属性的作用是提供 ssl 证书密码, 使重启 apache 时不用提示输入证书密码.
1 |
SSLPassPhraseDialog exec:/etc/httpd/conf.d/sslPass.sh |
保存退出
新建一个名为 sslPass.sh 的文件, 输入以下内容.
1 2 |
#!/bin/sh echo 证书密码 |
这只对所有证书密码相同时有效, 如果多个证书密码不同, 需要写判断规则并返回相应密码. 例如:
1 2 3 4 5 6 7 8 9 10 11 |
# !/bin/ksh host=`echo $1 | cut -d: -f1` port=`echo $1 | cut -d: -f2` algorithm=$2 if [ "$host" = "xxxx.com" -a "$algorithm" = "RSA" ]; then case "$port" in 8080) echo 8080端口对应ssl证书的密码;; 8888) echo 8888端口对应ssl证书的密码;; esac fi |
保存退出
下面设置每个虚拟目录对应的参数
编辑 /etc/httpd/conf.d/host.conf , 这将创建一个 conf 文件, 在这里加入虚拟目录的配置, apache 会调用它.
1 |
vi /etc/httpd/conf.d/host.conf |
参考以下设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<VirtualHost x.x.x.x:80> DocumentRoot /var/www/html/blog ServerName xxxx.com ServerAlias *.xxxx.com </virtualHost> <VirtualHost x.x.x.x:443> DocumentRoot /var/www/html/blog ServerName xxxx.com ServerAlias *.xxxx.com SSLEngine on SSLCertificateFile /etc/httpd/conf.d/xxxx.com_ssl.crt SSLCertificateKeyFile /etc/httpd/conf.d/xxxx.com_ssl.key SSLCertificateChainFile /etc/httpd/conf.d/ca.crt SSLCACertificateFile /etc/httpd/conf.d/ca-bundle.crt </VirtualHost> <VirtualHost _default_:*> DocumentRoot /var/www/html/ </VirtualHost> |
相关解释
1 2 3 4 5 6 7 8 9 |
#必须, 从证书颁发机构申请的ssl证书 SSLCertificateFile /etc/httpd/conf.d/xxxx.com_ssl.crt #必须, 从证书颁发机构申请的ssl证书的私钥 SSLCertificateKeyFile /etc/httpd/conf.d/xxxx.com_ssl.key #可选, 推荐设置, 证书颁发机构的根证书, 要求用pem格式, 可将多个证书放在一个文件中, 用文本工具编辑 SSLCertificateChainFile /etc/httpd/conf.d/ca.crt #可选, 证书颁发机构提供的证书集合, 文件较大, pem格式 SSLCACertificateFile /etc/httpd/conf.d/ca-bundle.crt |
重启 apache , 用 https 访问试试吧.