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

https 03 - operation, marketing, sharing - 开启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测试


微信打赏支付宝打赏

感谢您的支持!

文章来源:卡米雷特的小站www.kamilet.cn)转载请注明出处。

卡米雷特

视觉控&技术控,不断学习中!

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。