CentOS 7 系统 Apache 服务器安装 SSL 证书
一、前言
Web 服务器安装 SSL 证书,主要是为了实现网站 https(超文本传输安全协议)访问。使用 https 协议可以更加安全的访问网站,因为交互信息都是经过加密的,可避免敏感信息被窃取劫持。另外浏览器厂商对 https 协议都已支持,并且在浏览器的地址栏有了明确提示,你正在访问的网站是否安全,从这方面来说,可见 SSL 证书已经逐渐成为网站标配,是网站未来发展的一个趋势。
配置环境:
- 操作系统: CentOS 7.4 64位
- Web 服务:Apache 2.4.10
二、获取 SSL 证书
现在各大云平台都有 SSL 证书提供,例如阿里云、腾讯云等,可以付费购买,或者免费领取一个。当然,免费和付费的 SSL 证书是有差别的,在购买时可以得到充分对比。然后根据你的服务器类型选择证书下载,一般服务器类型分为 Tomcat、Apache、Nginx、IIS、其他。本文以 Apache 为例,下载 Apache 版本证书,压缩包包含 3 个文件,分别是*_public.crt
文件是证书文件,*_chain.crt
是证书链(中间证书)文件,*.key
文件是证书的私钥文件(申请证书时如果没有选择系统创建 CSR,则没有该文件)。
三、安装 SSL 证书
这里没有使用真实的证书名称,为了方便说明,假设三个文件名称分别为:证书文件名是example_public.crt
,证书链文件是example_chain.crt
,私钥文件是example.key
。
1、上传 SSL 证书
将 SSL 证书的三个文件上传至服务器指定目录。例如:在 Apache 安装目录下创建 cert 目录,将证书文件上传至 cert 目录。
2、修改 httpd.conf 文件
打开 Apache 安装目录下 conf 目录中的 httpd.conf 文件,找到以下内容并去掉“#”,并保存。
# 如果找不到请确认是否编译过 openssl 插件
#LoadModule ssl_module modules/mod_ssl.so
# 删除行首的配置语句注释符号“#”,保存后退出
#Include conf/extra/httpd-ssl.conf
3、修改 httpd-ssl.conf 文件
打开 Apache 安装目录下 conf/extra/httpd-ssl.conf 文件。
3.1 在配置文件中找到,并修改如下配置项:
# 添加 SSL 协议支持协议,去掉不安全的协议
SSLProtocol all -SSLv2 -SSLv3
# 修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
3.2 在配置文件中找到<VirtualHost _default_:443>
…</VirtualHost>
节点配置。可以注释掉默认节点,再新加节点配置,或者直接配置默认节点。最终配置如下:
<VirtualHost *:443>
DocumentRoot "/webdata/www/www.example.com"
ServerName www.example.com:443
#ServerAdmin you@example.com
# 启用 SSL
SSLEngine on
# 证书公钥配置
SSLCertificateFile /webdata/server/httpd-2.4.10/cert/example_public.crt
# 证书私钥配置
SSLCertificateKeyFile /webdata/server/httpd-2.4.10/cert/example.key
# 证书链配置,如果该属性开头有 '#'字符,请删除掉
SSLCertificateChainFile /webdata/server/httpd-2.4.10/cert/example_chain.crt
ErrorLog "/webdata/log/httpd/www.example.com_error_log"
TransferLog "/webdata/log/httpd/www.example.com_access_log"
</VirtualHost>
4、重启 Apache
service httpd restart
到此,安装 SSL 证书完成,正常情况下,可以使用 https 访问了。下面会说一下注意事项和可能会遇到的问题。
四、注意事项
- 如果你使用了云主机,例如阿里云的ECS云主机,需要注意在“安全组规则”中允许 443 端口访问。
- 主机的防火墙添加 443 端口访问,并重启防火墙。
五、遇到的问题
1、正常配置后,重启 Apache 时错误:
SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).failed
解决办法:编辑 Apache 配置文件 httpd.conf,找到如下配置,取消注释,既去掉“#”。
#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
重启 Apache 到此完成。
2、将原来 http 80 端口的访问重定向到 https 443 端口
添加 http 80 端口虚拟主机配置文件,重定向到 https 443 端口访问。
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://www.example.com/
</VirtualHost>
六、设置多个虚拟主机支持 SSL 证书
设置多个虚拟主机,可在 Apache 安装目录下 conf/extra/httpd-ssl.conf 文件,增加设置节点<VirtualHost *:443>
…</VirtualHost>
。或者添加独立配置文件,这需要注释掉原 httpd-ssl.conf 文件的设置节点<VirtualHost *:443>
…</VirtualHost>
,增加独立配置文件,配置文件的目录位置,是与普通的 http 80 端口设置多个虚拟主机是一样的。在如下目录中增加配置文件:
/webdata/server/httpd-2.4.10/conf/vhosts
配置文件内容:
<DirectoryMatch "/webdata/www/www.example.com/(attachment|html|data)">
<Files ~ ".php">
Order allow,deny
Deny from all
</Files>
</DirectoryMatch>
<VirtualHost *:443>
# 启用 SSL
SSLEngine on
# 证书公钥配置
SSLCertificateFile /webdata/server/httpd-2.4.10/cert/www.example.com_public.crt
# 证书私钥配置
SSLCertificateKeyFile /webdata/server/httpd-2.4.10/cert/www.example.com.key
# 证书链配置,如果该属性开头有 '#'字符,请删除掉
SSLCertificateChainFile /webdata/server/httpd-2.4.10/cert/www.example.com_chain.crt
DocumentRoot /webdata/www/www.example.com
ServerName example.com
ServerAlias www.example.com
<Directory "/webdata/www/www.example.com">
Options FollowSymLinks
AllowOverride all
Order allow,deny
Allow from all
</Directory>
#ErrorLog "/webdata/log/httpd/www.example.com-error.log"
#CustomLog "/webdata/log/httpd/www.example.com.log" common
</VirtualHost>
(完)