CentOS 7 系统 Apache 服务器安装 SSL 证书

[TOCM]

一、前言


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 文件,找到以下内容并去掉“#”,并保存。

  1. # 如果找不到请确认是否编译过 openssl 插件
  2. #LoadModule ssl_module modules/mod_ssl.so
  3. # 删除行首的配置语句注释符号“#”,保存后退出
  4. #Include conf/extra/httpd-ssl.conf
3、修改 httpd-ssl.conf 文件

打开 Apache 安装目录下 conf/extra/httpd-ssl.conf 文件。

3.1 在配置文件中找到,并修改如下配置项:

  1. # 添加 SSL 协议支持协议,去掉不安全的协议
  2. SSLProtocol all -SSLv2 -SSLv3
  3. # 修改加密套件如下
  4. SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
  5. SSLHonorCipherOrder on

3.2 在配置文件中找到<VirtualHost _default_:443></VirtualHost>节点配置。可以注释掉默认节点,再新加节点配置,或者直接配置默认节点。最终配置如下:

  1. <VirtualHost *:443>
  2. DocumentRoot "/webdata/www/www.example.com"
  3. ServerName www.example.com:443
  4. #ServerAdmin you@example.com
  5. # 启用 SSL
  6. SSLEngine on
  7. # 证书公钥配置
  8. SSLCertificateFile /webdata/server/httpd-2.4.10/cert/example_public.crt
  9. # 证书私钥配置
  10. SSLCertificateKeyFile /webdata/server/httpd-2.4.10/cert/example.key
  11. # 证书链配置,如果该属性开头有 '#'字符,请删除掉
  12. SSLCertificateChainFile /webdata/server/httpd-2.4.10/cert/example_chain.crt
  13. ErrorLog "/webdata/log/httpd/www.example.com_error_log"
  14. TransferLog "/webdata/log/httpd/www.example.com_access_log"
  15. </VirtualHost>
4、重启 Apache
  1. service httpd restart

到此,安装 SSL 证书完成,正常情况下,可以使用 https 访问了。下面会说一下注意事项和可能会遇到的问题。

四、注意事项


  1. 如果你使用了云主机,例如阿里云的ECS云主机,需要注意在“安全组规则”中允许 443 端口访问。
  2. 主机的防火墙添加 443 端口访问,并重启防火墙。

五、遇到的问题


1、正常配置后,重启 Apache 时错误:
  1. SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).failed

解决办法:编辑 Apache 配置文件 httpd.conf,找到如下配置,取消注释,既去掉“#”。

  1. #LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

重启 Apache 到此完成。

2、将原来 http 80 端口的访问重定向到 https 443 端口

添加 http 80 端口虚拟主机配置文件,重定向到 https 443 端口访问。

  1. <VirtualHost *:80>
  2. ServerName example.com
  3. ServerAlias www.example.com
  4. Redirect permanent / https://www.example.com/
  5. </VirtualHost>

六、设置多个虚拟主机支持 SSL 证书


设置多个虚拟主机,可在 Apache 安装目录下 conf/extra/httpd-ssl.conf 文件,增加设置节点<VirtualHost *:443></VirtualHost>。或者添加独立配置文件,这需要注释掉原 httpd-ssl.conf 文件的设置节点<VirtualHost *:443></VirtualHost>,增加独立配置文件,配置文件的目录位置,是与普通的 http 80 端口设置多个虚拟主机是一样的。在如下目录中增加配置文件:

  1. /webdata/server/httpd-2.4.10/conf/vhosts

配置文件内容:

  1. <DirectoryMatch "/webdata/www/www.example.com/(attachment|html|data)">
  2. <Files ~ ".php">
  3. Order allow,deny
  4. Deny from all
  5. </Files>
  6. </DirectoryMatch>
  7. <VirtualHost *:443>
  8. # 启用 SSL
  9. SSLEngine on
  10. # 证书公钥配置
  11. SSLCertificateFile /webdata/server/httpd-2.4.10/cert/www.example.com_public.crt
  12. # 证书私钥配置
  13. SSLCertificateKeyFile /webdata/server/httpd-2.4.10/cert/www.example.com.key
  14. # 证书链配置,如果该属性开头有 '#'字符,请删除掉
  15. SSLCertificateChainFile /webdata/server/httpd-2.4.10/cert/www.example.com_chain.crt
  16. DocumentRoot /webdata/www/www.example.com
  17. ServerName example.com
  18. ServerAlias www.example.com
  19. <Directory "/webdata/www/www.example.com">
  20. Options FollowSymLinks
  21. AllowOverride all
  22. Order allow,deny
  23. Allow from all
  24. </Directory>
  25. #ErrorLog "/webdata/log/httpd/www.example.com-error.log"
  26. #CustomLog "/webdata/log/httpd/www.example.com.log" common
  27. </VirtualHost>

(完)