插件窝 干货文章 Apache与SSL证书结合,实现网站HTTPS加密

Apache与SSL证书结合,实现网站HTTPS加密

Apache 证书 SSL 配置 192    来源:    2025-04-02

Apache与SSL证书结合实现HTTPS加密指南

一、准备工作

  1. 获取SSL证书

    • 从证书颁发机构(CA)如Let's Encrypt、DigiCert等购买或申请免费证书
    • 通常包括以下文件:
      • 域名证书(如domain.crt)
      • 中间证书(如intermediate.crt)
      • 私钥文件(如domain.key)
  2. 确认Apache安装

    • 确保已安装Apache并启用SSL模块
    • 检查命令:apache2 -vhttpd -v

二、配置步骤

1. 安装SSL模块

# Debian/Ubuntu
sudo a2enmod ssl
sudo systemctl restart apache2

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

2. 配置证书文件

将证书文件上传到服务器,建议存放在:

/etc/ssl/certs/    # 证书文件
/etc/ssl/private/  # 私钥文件

3. 配置Apache虚拟主机

编辑SSL配置文件(位置可能因系统而异): - /etc/apache2/sites-available/default-ssl.conf (Debian/Ubuntu) - /etc/httpd/conf.d/ssl.conf (CentOS/RHEL)

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

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/domain.crt
    SSLCertificateKeyFile /etc/ssl/private/domain.key
    SSLCertificateChainFile /etc/ssl/certs/intermediate.crt

    # 其他配置...
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

4. 启用SSL站点

# Debian/Ubuntu
sudo a2ensite default-ssl
sudo systemctl reload apache2

# CentOS/RHEL
sudo systemctl restart httpd

5. 强制HTTPS重定向(可选)

在80端口的虚拟主机配置中添加:

<VirtualHost *:80>
    ServerName yourdomain.com
    Redirect permanent / https://yourdomain.com/
</VirtualHost>

三、高级配置建议

  1. 增强安全性
# 禁用不安全的协议和加密套件
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLHonorCipherOrder on
  1. 启用HSTS
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
  1. OCSP装订
SSLUseStapling on
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"

四、测试与验证

  1. 使用浏览器访问https://yourdomain.com,检查锁图标
  2. 使用SSL测试工具:

    • SSL Labs测试
    • 命令行测试:openssl s_client -connect yourdomain.com:443
  3. 检查Apache错误日志:

tail -f /var/log/apache2/error.log
# 或
tail -f /var/log/httpd/error_log

五、常见问题解决

  1. 证书链不完整

    • 确保中间证书正确配置
    • 可使用cat domain.crt intermediate.crt > combined.crt合并证书
  2. 私钥不匹配

    • 验证私钥与证书匹配:openssl x509 -noout -modulus -in domain.crt | openssl md5
    • 对比:openssl rsa -noout -modulus -in domain.key | openssl md5
  3. 权限问题

    • 确保私钥文件权限为600:chmod 600 domain.key
    • 确保Apache用户有读取权限
  4. SELinux阻止

    • CentOS/RHEL可能需要调整SELinux策略:
    chcon -R -t httpd_sys_content_t /etc/ssl/certs/
    chcon -R -t httpd_sys_content_t /etc/ssl/private/
    

通过以上步骤,您应该能够成功在Apache上配置HTTPS加密。如需更高级的安全配置,建议参考Mozilla的SSL配置生成器获取最新最佳实践。