开启HTTPS-03:Apache环境准备,SSL证书安装和Apache虚拟主机配置

接下来我们要正式开始将SSL证书和Apache服务关联起来了,在完成这个步骤后,理论上Apache就可以接受443端口的https访问,离大功告成就不远了。
httpd.conf文件位置确认
首先我们找到Apache的配置文件httpd.conf。如果是通过yum的方式安装,那么位置会在:/etc/httpd/conf/httpd.conf。如果没有,那么请通过下面的命令查找:
# find / httpd.conf
Apache日志位置确认
我们假定你的Apache是通过yum方式安装的,那么可以通过查看httpd.conf的设置来确定Apache日志的位置。我们打开它:
# vim /etc/httpd/conf/httpd.conf
找到前缀是ErrorLog和的句子。
# ErrorLog "logs/error_log"
# CustomLog "logs/access_log"
这表明日志的位置在Apache的默认日志目录/var/log/httpd/下。如果你修改过这个设置,则记下相应的路径即可。
关闭文件的方式为:按下ESC,然后输入“:q!”(不含引号)。
mod_ssl和openssl安装
下面我们安装两个必须的ssl模块。
# yum install mod_ssl openssl
有任何提示输入Y按下回车即可。如果你已经安装了相应的模块,也会自动帮你检查是否可以更新。
ssl.conf文件位置确认
根据你的Apache版本不同,有可能在httpd目录下的:/httpd/conf/extra/httpd-ssl.conf,也有可能是/httpd/conf.d/ssl.conf,我们这里假定路径是后者。
当然你可以选择查找:
# find / ssl.conf
ssl.conf加载确认和ssl模块开启确认
在最新的Apache 2.4版本中,你无需关心安装ssl_mod后Apache是否加载,因为Apache是默认读取所有配置文件的,安装操作将会为你开启这个文件。
比如,Apache的httpd.conf里可以有这两句:
IncludeOptional conf.d/*.conf
Include conf.moudles.d/*.conf
如此,你可以在conf.d下找到的所有.conf文件都会被读取;而在conf.moudles.d中,有一个.conf文件里有这句:
LoadModule ssl_module modules/mod_ssl.so
这样就可以了。
当然,由于安装环境各不相同,也可能需要保证httpd.conf里有这样两句:
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
总而言之,要让Apache加载我们刚说的ssl.conf文件,并且启动我们刚安装的ssl模块。具体的代码位置可能略有差异,但都在httpd文件夹内。
关闭文件的方式为:按下ESC,然后输入“:wq”(不含引号)。
在ssl.conf内配置443虚拟主机
我们选择使用虚拟主机开启443端口,并保留80端口。这样万一SSL证书发生问题,只需要解除网站往https的跳转我们就可以正常使用http来访问网站了。另一个好处在于,如果服务器上同时运行着其他站点,我们可以选择仅开启其中部分站点的https。
打开ssl.conf文件。
# vim /etc/httpd/conf.d/ssl.conf
在最下方加入这些配置(仅以阿里云Symantec为例):
<VirtualHost *:443>
#站点路径
DocumentRoot /var/www/html/kamiletcn/
#站点域名
ServerName www.kamilet.cn:443
ServerAlias kamilet.cn:443
#日志配置
ErrorLog /var/log/ssl_error_log
TransferLog /var/log/ssl_access_log
LogLevel warn
CustomLog /var/log/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
<Directory "/var/www/html/kamiletcn/">
Options FollowSymLinks
AllowOverride all
Order allow,deny
Allow from all
</Directory>
#加密组件
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
SSLCertificateFile /etc/httpd/cert/abc_public.crt
SSLCertificateKeyFile /etc/httpd/cert/abc.key
SSLCertificateChainFile /etc/httpd/cert/abc_chain.crt
</VirtualHost>
这里已经配置好了阿里云要求的加密组件,证书路径采用我们第二部分设定的证书路径。
设置ssl证书和加密套件
上述配置中,以下部分属于加密套件。这是阿里云提供的Symantec证书在Apache服务器下的标准设置。
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
以下部分属于SSL证书目录,和第二部分教程保持一致。
SSLCertificateFile /etc/httpd/cert/abc_public.crt
SSLCertificateKeyFile /etc/httpd/cert/abc.key
SSLCertificateChainFile /etc/httpd/cert/abc_chain.crt
设置ssl日志目录
上述配置中,以下部分属于日志目录。之所以单独拿出来说明,是因为你可以通过这里的日志来查看为什么SSL配置后会出现报错。另外,如果有多个SSL虚拟主机,这里的目录可以分开配置,这样你就可以针对性检查。
ErrorLog /var/log/ssl_error_log
TransferLog /var/log/ssl_access_log
LogLevel warn
CustomLog /var/log/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
重启Apache和报错排查
保存文件后,关闭Apache服务。检查语法并重启。
# service httpd stop
#
# httpd –t
# Syntax OK
#
# service httpd restart
如果出现错误Apache无法启动,请返回上面的部分开始排查。直接查看ssl日志是最有效的方法之一:
# vim /var/log/ssl_error_log
一般来说,最可能出现的错误为:
- 端口占用:blocked port。关闭占用程序即可(具体方法请百度),或尝试重启系统。
- 语法错误:syntax error。检查ssl.conf的虚拟主机语法。
- 证书不匹配:key values mismatch。证书内容错误,混放了几个证书,或者证书失效。
当Apache启动成功,我们就看见了胜利的曙光。
返回上一步: SSL证书申请、有效性确认和上传
进入下一步:端口打通:应用层、系统层、服务器防火墙、CDN,Https测试