Skip to main content

Apache配置SSL证书完整教程:从申请到部署

· 5 min read
OHTTPS

Apache是广泛使用的Web服务器,正确配置SSL证书对于保障网站安全至关重要。本文将详细介绍如何在Apache服务器上配置SSL证书,包括SSL模块启用、证书安装、虚拟主机配置和安全优化,帮助您快速部署HTTPS网站。

一、准备工作

1. 获取SSL证书

在配置Apache之前,您需要:

  • 已申请SSL证书(从OHTTPS、Let's Encrypt等)
  • 证书文件(.crt或.pem)
  • 私钥文件(.key)
  • 证书链文件(chain.crt,可选但推荐)

2. 上传证书文件

将证书文件上传到服务器:

# 创建证书目录
sudo mkdir -p /etc/apache2/ssl

# 上传证书文件
sudo cp certificate.crt /etc/apache2/ssl/
sudo cp private.key /etc/apache2/ssl/
sudo cp chain.crt /etc/apache2/ssl/

# 设置文件权限
sudo chmod 600 /etc/apache2/ssl/private.key
sudo chmod 644 /etc/apache2/ssl/certificate.crt
sudo chmod 644 /etc/apache2/ssl/chain.crt

二、启用SSL模块

1. 启用SSL模块

# Ubuntu/Debian
sudo a2enmod ssl
sudo systemctl restart apache2

# CentOS/RHEL
sudo yum install mod_ssl
sudo systemctl restart httpd

2. 启用其他必要模块

# 启用重写模块(用于HTTP到HTTPS重定向)
sudo a2enmod rewrite
sudo a2enmod headers

# 重启Apache
sudo systemctl restart apache2

三、基本SSL配置

1. 编辑虚拟主机配置

编辑站点配置文件(通常在 /etc/apache2/sites-available/ 目录):

sudo nano /etc/apache2/sites-available/example.com-ssl.conf

2. 添加SSL虚拟主机配置

<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com

# SSL配置
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/certificate.crt
SSLCertificateKeyFile /etc/apache2/ssl/private.key
SSLCertificateChainFile /etc/apache2/ssl/chain.crt

# SSL协议配置
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder on

# 文档根目录
DocumentRoot /var/www/html
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

# 错误日志
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

3. 启用站点

# 启用SSL站点
sudo a2ensite example.com-ssl.conf

# 测试配置
sudo apache2ctl configtest

# 如果测试通过,重启Apache
sudo systemctl restart apache2

四、HTTP到HTTPS重定向

1. 配置HTTP虚拟主机重定向

编辑HTTP虚拟主机配置文件:

<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com

# 重定向所有HTTP请求到HTTPS
Redirect permanent / https://example.com/
</VirtualHost>

2. 使用Rewrite规则重定向

<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

五、SSL配置优化

1. 完整的安全配置

<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com

# SSL配置
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/certificate.crt
SSLCertificateKeyFile /etc/apache2/ssl/private.key
SSLCertificateChainFile /etc/apache2/ssl/chain.crt

# SSL协议(只允许TLS 1.2和1.3)
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

# SSL加密套件
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305
SSLHonorCipherOrder on

# OCSP Stapling
SSLUseStapling on
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"

# 安全头
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"

# 文档根目录
DocumentRoot /var/www/html
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

# 日志
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

2. 全局SSL配置

编辑 /etc/apache2/conf-available/ssl-params.conf

# 现代SSL配置
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder on

# OCSP Stapling
SSLUseStapling on
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"

# 安全头
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"

启用配置:

sudo a2enconf ssl-params
sudo systemctl restart apache2

六、多域名配置

1. 单证书多域名

<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com api.example.com blog.example.com

# SSL配置...
</VirtualHost>

2. 多证书配置(SNI)

# 第一个域名
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/example.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example.com.key
SSLCertificateChainFile /etc/apache2/ssl/example.com.chain.crt
# 其他配置...
</VirtualHost>

# 第二个域名
<VirtualHost *:443>
ServerName another.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/another.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/another.com.key
SSLCertificateChainFile /etc/apache2/ssl/another.com.chain.crt
# 其他配置...
</VirtualHost>

七、常见问题排查

1. 证书链不完整

问题:浏览器显示"证书不受信任"

解决方法

# 确保配置了证书链文件
SSLCertificateChainFile /etc/apache2/ssl/chain.crt

2. SSL模块未启用

问题:Apache无法启动或SSL不工作

解决方法

# 检查SSL模块是否启用
apache2ctl -M | grep ssl

# 如果未启用,启用模块
sudo a2enmod ssl
sudo systemctl restart apache2

3. 权限问题

问题:Apache无法读取证书文件

解决方法

# 检查文件权限
ls -l /etc/apache2/ssl/

# 设置正确的权限
sudo chmod 644 /etc/apache2/ssl/*.crt
sudo chmod 600 /etc/apache2/ssl/*.key
sudo chown root:root /etc/apache2/ssl/*

八、测试SSL配置

1. 使用SSL Labs测试

访问 https://www.ssllabs.com/ssltest/ 输入您的域名,查看SSL配置评分。

2. 使用命令行测试

# 测试SSL连接
openssl s_client -connect example.com:443 -servername example.com

# 检查Apache配置
sudo apache2ctl configtest

九、证书自动更新

1. 使用OHTTPS自动更新

如果使用OHTTPS申请的证书:

  1. 在OHTTPS平台配置自动更新
  2. 配置自动部署到服务器
  3. 证书更新后自动部署

2. 使用Certbot自动更新

# 安装Certbot
sudo apt-get install certbot python3-certbot-apache

# 申请证书(自动配置Apache)
sudo certbot --apache -d example.com -d www.example.com

# 测试自动更新
sudo certbot renew --dry-run

十、最佳实践

1. 安全配置

  • ✅ 使用TLS 1.2或更高版本
  • ✅ 禁用不安全的加密套件
  • ✅ 启用HSTS
  • ✅ 启用OCSP Stapling
  • ✅ 配置安全响应头

2. 性能优化

  • ✅ 启用SSL会话缓存
  • ✅ 使用强加密但不过度消耗资源
  • ✅ 启用OCSP Stapling减少延迟

3. 证书管理

  • ✅ 定期更新证书
  • ✅ 监控证书到期时间
  • ✅ 备份证书和私钥
  • ✅ 使用自动化工具管理证书

总结

正确配置Apache的SSL证书是保障网站安全的重要步骤。通过本文的指导,您可以:

  • ✅ 正确安装和配置SSL证书
  • ✅ 启用SSL模块
  • ✅ 优化SSL配置提升安全性
  • ✅ 配置HTTP到HTTPS重定向
  • ✅ 启用安全特性(HSTS、OCSP Stapling等)
  • ✅ 实现证书自动更新

记住定期更新证书,监控SSL配置,确保网站始终使用最新的安全配置。如果您需要申请免费SSL证书,推荐使用OHTTPS平台,它提供了完整的证书管理和自动部署功能。

OHTTPS: 免费HTTPS证书/SSL证书申请 • 自动化更新、部署、监控
OHTTPS 支持通过多种域名验证方式(DNS验证、HTTP验证、文件验证等)申请免费的HTTPS证书/SSL证书,包括单域名证书、多域名证书、通配符证书、IP证书等,支持HTTPS证书/SSL证书的自动化更新、自动化部署、自动化监控及告警等,并支持将HTTPS证书/SSL证书自动化部署至阿里云、腾讯云、群晖NAS、百度云、七牛云、多吉云、又拍云、宝塔面板、Docker容器、SSH等,实现HTTPS证书/SSL证书的一站式申请、更新、部署、监控和管理。