在当今互联网环境中,网站的安全性和用户体验至关重要,而HTTPS协议已成为标配,Apache服务器作为最流行的Web服务器之一,支持配置多个SSL证书以满足不同域名、子域名的安全需求,本文将详细介绍如何在Apache服务器上配置多个SSL证书,包括基于IP地址、基于域名(SNI)以及通配符证书的实现方法。
基于IP地址的多SSL证书配置
每个SSL证书都对应一个唯一的IP地址,这种配置方式适用于需要为不同IP地址分配独立证书的场景,确保服务器拥有多个独立IP地址,然后在Apache配置文件中为每个IP地址创建独立的虚拟主机段。
配置步骤:
- 为每个IP地址分配独立的
<VirtualHost>
块,并指定对应的SSL证书路径。 - 在每个
<VirtualHost>
块中配置SSLEngine on
、SSLCertificateFile
、SSLCertificateKeyFile
等指令。
示例配置:
<VirtualHost 192.168.1.100:443> SSLEngine on SSLCertificateFile /path/to/cert1.crt SSLCertificateKeyFile /path/to/key1.key ServerName example1.com DocumentRoot /var/www/example1 </VirtualHost> <VirtualHost 192.168.1.101:443> SSLEngine on SSLCertificateFile /path/to/cert2.crt SSLCertificateKeyFile /path/to/key2.key ServerName example2.com DocumentRoot /var/www/example2 </VirtualHost>
局限性: 需要为每个域名分配独立IP地址,成本较高且IP资源有限,目前已较少使用。
基于SNI(Server Name Indication)的多SSL证书配置
SNI技术允许一个IP地址上托管多个HTTPS虚拟主机,每个域名使用不同的SSL证书,这是目前最常用的多证书配置方式,要求服务器和客户端均支持TLS扩展。
配置步骤:
- 确保Apache已启用
mod_ssl
和mod_sni
模块(通常mod_ssl
已内置SNI支持)。 - 为每个域名创建独立的
<VirtualHost *:443>
块,并配置对应的SSL证书。
示例配置:
<VirtualHost *:443> SSLEngine on SSLCertificateFile /path/to/cert1.crt SSLCertificateKeyFile /path/to/key1.key ServerName example1.com DocumentRoot /var/www/example1 </VirtualHost> <VirtualHost *:443> SSLEngine on SSLCertificateFile /path/to/cert2.crt SSLCertificateKeyFile /path/to/key2.key ServerName example2.com DocumentRoot /var/www/example2 </VirtualHost>
验证SNI支持: 使用openssl s_client -connect example.com:443 -servername example.com
命令可测试客户端是否支持SNI。
通配符证书与多域名证书配置
对于子域名或多个相关域名,可使用通配符证书或多域名(SAN)证书简化配置。
通配符证书
- 支持格式:
*.example.com
(如www.example.com
、api.example.com
)。 - 配置方式与单域名证书相同,只需在
ServerName
中使用通配符或具体子域名。
示例配置:
<VirtualHost *:443> SSLEngine on SSLCertificateFile /path/to/wildcard.crt SSLCertificateKeyFile /path/to/wildcard.key ServerName *.example.com DocumentRoot /var/www/wildcard </VirtualHost>
多域名证书(SAN)
- 单个证书包含多个域名(如
example1.com
、example2.com
)。 - 配置时需在
<VirtualHost>
块中指定不同的ServerName
,但共享同一套证书文件。
示例配置:
<VirtualHost *:443> SSLEngine on SSLCertificateFile /path/to/san.crt SSLCertificateKeyFile /path/to/san.key ServerName example1.com DocumentRoot /var/www/example1 </VirtualHost> <VirtualHost *:443> SSLEngine on SSLCertificateFile /path/to/san.crt SSLCertificateKeyFile /path/to/san.key ServerName example2.com DocumentRoot /var/www/example2 </VirtualHost>
配置注意事项与最佳实践
- 证书路径与权限:确保证书和私钥文件路径正确,且私钥文件权限设置为600(仅所有者可读写)。
- 证书链完整性:配置时需包含完整的证书链(中级证书和根证书),可通过
SSLCertificateChainFile
或合并到证书文件中。 - 协议与加密套件:推荐使用TLS 1.2/1.3,禁用弱加密套件,可通过
SSLProtocol
和SSLCipherSuite
指令配置。 - 重定向HTTP到HTTPS:为每个虚拟主机配置HTTP到HTTPS的重定向规则,确保所有流量均通过加密传输。
常见指令对照表:
| 指令 | 作用 | 示例 |
|——|——|——|
| SSLEngine on
| 启用SSL模块 | SSLEngine on
|
| SSLCertificateFile
| 指定证书文件路径 | SSLCertificateFile /etc/ssl/certs/site.crt
|
| SSLCertificateKeyFile
| 指定私钥文件路径 | SSLCertificateKeyFile /etc/ssl/private/site.key
|
| ServerName
| 设置虚拟主机域名 | ServerName example.com
|
| SSLProtocol
| 配置支持的SSL/TLS协议 | SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
|
通过合理配置多SSL证书,可有效提升网站的安全性和灵活性,在实际操作中,需根据服务器环境和业务需求选择合适的配置方式,并定期检查证书有效期,确保证书及时更新。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/16741.html