ssl新闻资讯

文档中心

Apache鏈嶅姟鍣ㄥ浣曞悓鏃堕厤缃袱寮燬SL璇佷功锛熷疄鎴樻寚鍗楁潵浜嗭紒

时间 : 2025-09-27 15:41:27浏览量 : 1

2Apache鏈嶅姟鍣ㄥ浣曞悓鏃堕厤缃袱寮燬SL璇佷功锛熷疄鎴樻寚鍗楁潵浜嗭紒

作为一名网络安全工程师,我经常需要为企业的Apache服务器配置SSL证书。今天我要分享一个实用技巧:如何在Apache服务器上同时配置两张SSL证书。这个需求在实际工作中很常见,比如企业可能需要为同一个域名同时使用商业CA证书和自签名证书,或者需要为不同的子域名配置不同的证书。

为什么需要两张SSL证书?

在开始配置之前,我们先理解下为什么会有这种需求:

1. 业务过渡期:从旧证书迁移到新证书时,可能需要同时保留两个证书一段时间

2. 不同环境需求:生产环境用商业CA证书,测试环境用自签名证书

3. 多域名管理:主域名和子域名使用不同的证书

4. 兼容性考虑:某些老旧设备可能只支持特定类型的加密算法

举个实际例子:某电商网站example.com需要在主站使用DigiCert的商业SSL证书,同时在支付子域pay.example.com使用更高级别的EV SSL证书。这种情况下就需要在Apache中配置两张不同的SSL证书。

准备工作

在开始前确保你已经准备好:

- 两张有效的SSL证书(.crt文件)

- 对应的私钥文件(.key文件)

- 根证书/中间证书链(如有)

- Apache已安装mod_ssl模块

检查mod_ssl是否已启用:

```bash

apachectl -M | grep ssl

```

如果看到"ssl_module"就说明已经启用。

基础单证书配置回顾

先快速回顾下单SSL证书的典型配置(以Ubuntu系统为例):

```apache

ServerName example.com

SSLEngine on

SSLCertificateFile /etc/ssl/certs/example.com.crt

SSLCertificateKeyFile /etc/ssl/private/example.com.key

SSLCertificateChainFile /etc/ssl/certs/intermediate.crt

多SSL证书的三种实现方式

方案一:基于不同端口的配置

这是最简单的实现方式,每张SSL监听不同端口:

第一个SSL监听443端口(默认HTTPS)

SSLCertificateFile /path/to/cert1.crt

SSLCertificateKeyFile /path/to/key1.key

第二个SSL监听8443端口(或其他非标准端口)

ServerName example.com

SSLCertificateFile /path/to/cert2.crt

SSLCertificateKeyFile /path/to/key2.key

优点:简单直接

缺点:用户需要记住非常用端口号

方案二:基于SNI的多域名配置

Server Name Indication(SNI)技术允许在同一个IP上为不同域名提供不同SSL:

```apache

ServerName main.example.com

SSLCertificateFile /path/to/main.crt

SSLCertificateKeyFile /path/to/main.key

Require all granted

ServerName shop.example.com

SSLEngine on

SSLCertificateFile /path/to/shop.crt

SSLCertificateKeyFile /path/to/shop.key

Require all granted

关键点

1. Apache版本需≥2.2.12支持SNI

2. 现代浏览器都支持SNI

3. Windows XP+IE6等老旧客户端不支持SNI

方案三:同一域名的双证书记录(较复杂)

通过OpenSSL合并两张私钥和两张证书记录到一个文件中:

合并私钥(注意权限保持600)

cat key1.pem key2.pem > combined_keys.pem

合并公钥(顺序很重要)

cat cert1.pem cert2.pem > combined_certs.pem

RSA+AES256加密合并后的私钥文件(可选)

openssl rsa -aes256 -in combined_keys.pem -out encrypted_keys.pem

然后在Apache中引用合并后的文件:

SSLCertificateFile /path/to/combined_certs.pem

SSLCertificateKeyFile /path/to/combined_keys.pem

SSL性能优化技巧

当使用多张SSL时要注意性能影响:

1. 会话缓存共享

```apache

httpd.conf中添加:

SSLStaplingCache shmcb:/tmp/stapling_cache(128000)

```

2. OCSP装订优化(减少客户端验证时间):

```apache

SSLUseStapling On

SSLStaplingResponderTimeout 5

SSLStaplingReturnResponderErrors Off

3. 启用HTTP/2(提升多资源加载速度):

Protocols h2 http/1.1

常见问题排查指南

Q1: Apache启动时报错"Failed to configure certificate..."

→ `检查私钥是否与公钥匹配`:

```bash

openssl x509 -noout -modulus -in cert.crt | openssl md5

openssl rsa -noout -modulus -in private.key | openssl md5

两个MD5值必须一致。

Q2: Chrome浏览器提示"NET::ERR_CERT_COMMON_NAME_INVALID"

→ `确认ServerName与CN或SAN匹配`:

openssl x509 -in cert.crt -text | grep "DNS:"

Q3: IE8等老浏览器无法访问

→ `可能是缺少中间CA或使用了SNI`:

openssl s_client -connect example.com:443 -servername example.com \

-showcerts > chain.txt

HTTPS安全加固建议

完成双证书记录后还应考虑:

1. 禁用不安全协议和加密套件:

SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1

SSLCipherSuite HIGH:!aNULL:!MD5:!RC4

2. 启用HSTS(强制HTTPS):

```apache

Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

3. 定期轮换密钥(即使未到期):

建议每6个月重新生成一次私钥并更新CSR。

与最佳实践建议

通过以上方法,你可以灵活地在Apache中部署多个SSL证书记录。根据我的经验给出几点建议:

1?? SNI方案最适合现代互联网应用场景

2?? IP+端口方案适合内部系统或特殊需求

3?? EC密钥比RSA更高效(P-256曲线推荐)

4?? Let's Encrypt可自动化管理多个域名的免费证书记录

最后提醒定期检查你的HTTPS安全评分:

ssllabs-scan example.com

保持A+评级才是真正的安全运维之道!

TAG:apache添加两张ssl证书,http加ssl,apache2安装ssl证书,apache ssl