跳转至

Apache安装配置SSL/HTTPS证书说明

  • 为便于调试,避免混乱,始终建议使用单独的配置文件或者与http配置文件放在一起,置于conf/vhost目录下。
  • Apache配置SSL证书,根据版本不同分为三种情况。

通用配置说明

  1. 参考配置文件里的省略号代表原来http的配置文件内容,根据实际情况替换参考配置文件中的证书文件路径(高亮标示行);
  2. 如果收到的证书公钥为pem后缀,则自行修改配置文件中的证书文件后缀,或者修改证书文件后缀,保持二者文件名完全一致;
  3. 将参考配置文件保存为单独的配置文件,放置于conf/vhost目录下实现自动加载;
  4. 如果未能自动加载,假设ssl.confhttpd.conf文件位于同级目录下,如/var/apache/conf/,可以在apache的httpd.conf中通过类似Include ssl.conf手动加载该配置文件;
  5. 确认httpd.conf已加载mod_socache_shmcbmod_ssl两个模块,或者在Apache编译时已加入这两个模块;
  6. 确认服务器443端口已开放,对部分云服务器商(如阿里云/腾讯云),还需要在产品控制台的安全组开放443端口,具体请参考云服务商技术文档;
  7. 重载/重启Apache,使配置生效;
  8. 如果使用了CDN/负载均衡,若CDN支持http协议回源则只在CDN上配置证书即可。如果CDN产品不支持http协议回源,则需要同时在服务器和CDN上配置证书,详情可以参考相应CDN产品技术文档。

2.4.8+ (2.4.8及更高)版本

自2.4.8版本开始,Apache使用和nginx同格式证书,只用到2个文件:

  • 合并证书链后的pem编码公钥pem/crt文件
  • 私钥key文件

参考配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Listen 443
SSLStrictSNIVHostCheck off

SSLCipherSuite AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL
SSLProtocol all -SSLv2 -SSLv3

<VirtualHost *:443>
    ...

    SSLEngine on
    SSLCertificateFile /etc/httpd/conf/sslkey/yourdomain_com_chained.crt
    SSLCertificateKeyFile /etc/httpd/conf/sslkey/yourdomain_com.key

</VirtualHost>

完整参考配置文件

注意修改高亮行的实际域名、网站目录、证书文件路径。

其他版本的完整参考配置文件不再列出。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Listen 443
SSLStrictSNIVHostCheck off

SSLCipherSuite AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL
SSLProtocol all -SSLv2 -SSLv3

<VirtualHost *:443>
    DocumentRoot /data/www/yourdomain_com
    ServerName yourdomain.com
    ServerAlias *.yourdomain.com
    #ErrorLog /var/logs/ssl_error.log

    <Directory /data/www/yourdomain_com>
        Options FollowSymLinks ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>

    SSLEngine on
    SSLCertificateFile /etc/httpd/conf/sslkey/yourdomain_com_chained.crt
    SSLCertificateKeyFile /etc/httpd/conf/sslkey/yourdomain_com.key

</VirtualHost>

2.3.11-2.4.7版本

该版本范围内的Apache配置SSL使用3个文件:

  • pem编码公钥pem/crt文件
  • 私钥key文件
  • CA机构的中级证书pem/crt文件

参考配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Listen 443
SSLStrictSNIVHostCheck off

SSLCipherSuite AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL
SSLProtocol all -SSLv2 -SSLv3

<VirtualHost *:443>
    ...

    SSLEngine on
    SSLCertificateFile /etc/httpd/conf/sslkey/yourdomain_com.crt
    SSLCertificateKeyFile /etc/httpd/conf/sslkey/yourdomain_com.key
    SSLCertificateChainFile /etc/httpd/conf/sslkey/ca.crt

</VirtualHost>

2.2-2.3.10版本

该版本范围内的Apache配置SSL同样使用3个文件:

  • pem编码公钥pem/crt文件
  • 私钥key文件
  • CA机构的中级证书pem/crt文件

参考配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
Listen 443
NameVirtualHost *:443
SSLStrictSNIVHostCheck off

SSLCipherSuite AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL
SSLProtocol all -SSLv2 -SSLv3

<VirtualHost *:443>
    ...

    SSLEngine on
    SSLCertificateFile /etc/httpd/conf/sslkey/yourdomain_com.crt
    SSLCertificateKeyFile /etc/httpd/conf/sslkey/yourdomain_com.key
    SSLCertificateChainFile /etc/httpd/conf/sslkey/ca.crt

</VirtualHost>

强制HTTPS

通常情况下,Apache的强制HTTPS通过配置网站根目录下的.htaccess文件实现,如果是绑定的子目录则修改子目录下的.htaccess文件。

.htaccess强制HTTPS规则

  1. 将规则代码复制到根目录(子目录)下的.htaccess文件中,如果没有此文件可以手动创建;
  2. 如果网站现有.htaccess文件已经有伪静态规则,则第一行的RewriteEngine On可以删去。
1
2
3
4
5
6
7
8
RewriteEngine On
# This will enable the Rewrite capabilities

RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.