温馨提示×

Ubuntu Apache SSL配置步骤

小樊
38
2025-12-19 00:57:36
栏目: 云计算

Ubuntu Apache SSL 配置步骤

一 准备与安装

  • 更新系统并安装 Apache 与 SSL 模块:
    • sudo apt update
    • sudo apt install apache2 libapache2-mod-ssl
  • 启用 SSL 模块:
    • sudo a2enmod ssl
  • 防火墙放行端口(如使用 UFW):
    • sudo ufw allow 80,443/tcp 或 sudo ufw allow ‘Apache Full’
  • 说明:启用 SSL 模块后通常会自动放行 443 端口;若未放行,可检查 /etc/apache2/ports.conf 是否包含 Listen 443

二 准备证书文件

  • 方案 A 使用 CA 颁发的证书(生产环境推荐)
    • 常见文件:域名证书 public.crt / domain.crt私钥 domain.key中间证书链 chain.crt / fullchain.pem
    • 建议将证书集中存放并修正权限:
      • sudo mkdir -p /etc/apache2/ssl
      • sudo cp YourDomainName_public.crt YourDomainName_chain.crt YourDomainName.key /etc/apache2/ssl
      • sudo chmod 600 /etc/apache2/ssl/*.key
  • 方案 B 自签名证书(仅测试)
    • 生成自签名证书(有效期 365 天):
      • sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048
        -keyout /etc/ssl/private/apache-selfsigned.key
        -out /etc/ssl/certs/apache-selfsigned.crt
  • 提示:部分厂商将证书与链合并为 fullchain.pem,此时通常只需配置 SSLCertificateFileSSLCertificateKeyFile

三 配置 Apache 启用 HTTPS

  • 编辑 SSL 虚拟主机配置(两种常见做法,二选一)
    • 使用默认 SSL 站点:
      • sudo nano /etc/apache2/sites-available/default-ssl.conf
      • 在 <VirtualHost *:443> 中确保包含:
        • ServerName your.domain
        • SSLEngine on
        • SSLCertificateFile /etc/apache2/ssl/YourDomainName_public.crt
        • SSLCertificateKeyFile /etc/apache2/ssl/YourDomainName.key
        • SSLCertificateChainFile /etc/apache2/ssl/YourDomainName_chain.crt
      • 启用站点:
        • sudo a2ensite default-ssl.conf
    • 或自建站点配置(/etc/apache2/sites-available/example.com.conf):
      • 在 <VirtualHost *:443> 中配置 DocumentRoot、ServerName、SSLEngine on 与上述证书路径
      • 启用站点:
        • sudo a2ensite example.com.conf
  • 确保监听 443
    • 检查 /etc/apache2/ports.conf 包含:Listen 80 与 Listen 443
  • 可选优化(在 mods-available/ssl.conf 或相应 VirtualHost 中设置)
    • SSLProtocol all -SSLv2 -SSLv3
    • SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:MEDIUM
    • SSLHonorCipherOrder on
    • SSLSessionCache shmcb:${APACHE_RUN_DIR}/ssl_scache(512000)
    • SSLSessionCacheTimeout 300
  • 使配置生效:
    • sudo systemctl reload apache2 或 sudo systemctl restart apache2

四 强制 HTTP 跳转 HTTPS(可选)

  • 启用重写模块:
    • sudo a2enmod rewrite
  • 在端口 80 的虚拟主机(如 000-default.conf)中添加:
    • RewriteEngine on
    • RewriteCond %{HTTPS} off
    • RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [L,R=301]
  • 或在 .htaccess(需 AllowOverride All):
    • RewriteEngine on
    • RewriteCond %{SERVER_PORT} !^443$
    • RewriteRule ^.* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  • 应用变更:
    • sudo systemctl reload apache2

五 验证与排错

  • 访问测试:
    • 打开浏览器访问 https://your.domain,确认地址栏显示锁形图标;自签名证书会提示不受信任(仅测试环境可接受)。
  • 证书路径核对:
    • 确保证书、私钥、链文件路径与配置一致;私钥权限为 600
  • 端口与模块:
    • 确认 443 端口已监听(ss -tlnp | grep :443),且 mod_ssl 已启用(a2enmod ssl)。
  • 日志排查:
    • 查看错误日志:tail -f /var/log/apache2/error.log
  • 自动化方式(Let’s Encrypt):
    • 安装 Certbot:sudo apt install certbot python3-certbot-apache
    • 一键申请并配置:sudo certbot --apache(将自动修改虚拟主机并开启重定向)。

0