LAMP实现数据加密传输的标准做法
一 核心思路与准备
- 在 Linux + Apache + MySQL + PHP 架构中,加密传输的关键是让 Apache 对外提供 HTTPS(TLS/SSL),并为站点正确部署证书链(证书、私钥、中间证书)。
- 证书获取途径:
- 免费证书:如 Let’s Encrypt,可用 Certbot 自动化申请与部署,适合生产环境。
- 自签名证书:用于测试或内网,浏览器会提示不受信任。
- 基础准备:确保域名已正确解析到服务器,防火墙放行 TCP 443,Apache 已安装并可正常运行。
二 方案一 使用 Let’s Encrypt 自动化部署 HTTPS(推荐)
- 安装 Certbot 并为 Apache 获取证书(以 Ubuntu/Debian 为例,其他发行版可用 snap 或各自包管理器):
- 安装 Certbot 与 Apache 插件:sudo apt-get update && sudo apt-get install certbot python3-certbot-apache
- 申请并自动配置 HTTPS:sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
- 自动续期与测试:
- 续期测试:sudo certbot renew --dry-run
- 生产续期通常已通过 systemd 或 cron 定时执行(Certbot 默认会添加定时任务)。
- 验证:访问 https://yourdomain.com,确认浏览器显示锁标识,证书路径与到期时间正确。
三 方案二 手动配置 Apache 使用证书(通用)
- 启用 SSL 模块与站点配置:
- 在 httpd.conf 或对应包含目录启用模块与包含关系:
- LoadModule ssl_module modules/mod_ssl.so
- IncludeOptional conf.d/*.conf 或 Include conf/extra/httpd-ssl.conf
- 部署证书文件(示例路径,按实际调整):
- 证书:SSLCertificateFile /etc/ssl/certs/your_cert.crt
- 私钥:SSLCertificateKeyFile /etc/ssl/private/your_key.key
- 中间证书链:SSLCertificateChainFile /etc/ssl/certs/your_intermediate.crt(若 CA 提供)
- 配置虚拟主机监听 443:
- <VirtualHost *:443>
- ServerName yourdomain.com
- DocumentRoot /var/www/yourwebsite
- SSLEngine on
- SSLCertificateFile /etc/ssl/certs/your_cert.crt
- SSLCertificateKeyFile /etc/ssl/private/your_key.key
- SSLCertificateChainFile /etc/ssl/certs/your_intermediate.crt
- 检查并重载:
- sudo apachectl configtest
- sudo systemctl reload apache2 或 sudo systemctl restart httpd
四 强制 HTTP 跳转 HTTPS 与 HSTS 建议
- 在端口 80 的虚拟主机或 .htaccess 中设置 301 跳转:
- RewriteEngine On
- RewriteCond %{SERVER_PORT} !^443$
- RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
- 或在 80 虚拟主机中使用 Redirect 永久跳转:
- Redirect permanent / https://yourdomain.com/
- 安全响应头(可选,谨慎启用 HSTS 预加载):
- Header always set Strict-Transport-Security “max-age=63072000; includeSubDomains; preload”
- 建议先在测试环境验证,避免误操作导致长期无法回退。
五 安全强化与验证
- 推荐的 SSL/TLS 参数(放在全局或 SSL 虚拟主机中):
- SSLProtocol -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2 +TLSv1.3
- SSLCipherSuite EECDH+AESGCM:EDH+AESGCM
- SSLHonorCipherOrder on
- 如环境支持,优先使用 ECDHE 密钥交换与 AES-GCM 套件,禁用 RC4、DES、MD5 等弱算法。
- 测试与运维:
- 配置语法检查:sudo apachectl configtest
- 在线检测:使用 SSL Labs SSL Test 评估套件与协议强度
- 证书到期监控:为续期设置提醒或自动任务,避免服务中断。