Apache安装配置SSL/HTTPS证书说明
- 为便于调试,避免混乱,始终建议使用单独的配置文件或者与http配置文件放在一起,置于
conf/vhost
目录下。
- Apache配置SSL证书,根据版本不同分为三种情况。
通用配置说明
- 参考配置文件里的省略号代表原来http的配置文件内容,根据实际情况替换参考配置文件中的证书文件路径(高亮标示行);
- 如果收到的证书公钥为pem后缀,则自行修改配置文件中的证书文件后缀,或者修改证书文件后缀,保持二者文件名完全一致;
- 将参考配置文件保存为单独的配置文件,放置于
conf/vhost
目录下实现自动加载;
- 如果未能自动加载,假设
ssl.conf
和httpd.conf
文件位于同级目录下,如/var/apache/conf/
,可以在apache的httpd.conf
中通过类似Include ssl.conf
手动加载该配置文件;
- 确认
httpd.conf
已加载mod_socache_shmcb
和mod_ssl
两个模块,或者在Apache编译时已加入这两个模块;
- 确认服务器443端口已开放,对部分云服务器商(如阿里云/腾讯云),还需要在产品控制台的安全组开放443端口,具体请参考云服务商技术文档;
- 重载/重启Apache,使配置生效;
- 如果使用了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规则
- 将规则代码复制到根目录(子目录)下的.htaccess文件中,如果没有此文件可以手动创建;
- 如果网站现有
.htaccess
文件已经有伪静态规则,则第一行的RewriteEngine On
可以删去。
| 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.
|