Linux LAMP数据加密落地指南
在 LAMP 架构中,建议从传输加密、数据库链路加密、应用层字段加密与静态数据加密四个层面协同实施,形成端到端的数据保护闭环。
一、传输层加密 HTTPS TLS
- 安装与启用模块:安装 OpenSSL 与 Apache 的 SSL 模块(mod_ssl),在 httpd.conf 中启用模块与包含 SSL 配置。
- 配置证书与链路安全:在 httpd-ssl.conf 指定证书与私钥路径,常见为:
- SSLCertificateFile:服务器证书(公钥)
- SSLCertificateKeyFile:服务器私钥
- SSLCertificateChainFile:中级 CA 证书链(按需)
同时禁用不安全协议与弱套件,例如:
- SSLProtocol all -SSLv2 -SSLv3
- SSLCipherSuite 采用高强套件并排除 NULL/EXPORT/DES/RC4/MD5 等弱项
- 强制跳转与验证:在 .htaccess 或虚拟主机中配置 80→443 跳转,重启 Apache 后用浏览器与 openssl s_client 校验证书与链。
- 说明:TLS/SSL 在传输层与应用层之间建立加密通道,保护通信的机密性、完整性与身份认证。
二、数据库链路加密 MySQL SSL
- 生成 CA 与服务器证书(示例):
- 生成 CA 私钥与自签证书:openssl genrsa 2048 > ca-key.pem;openssl req -new -x509 -nodes -days 365000 -key ca-key.pem -out ca-cert.pem
- 生成服务器私钥与 CSR:openssl req -newkey rsa:2048 -days 365000 -nodes -keyout server-key.pem -out server-req.pem
- 签发服务器证书:openssl x509 -req -in server-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
- 配置 MySQL 启用 SSL:在 [mysqld] 中指定 ssl-ca/cert/key,重启 MySQL,创建仅 SSL 访问用户并验证:
- 示例授权:GRANT ALL PRIVILEGES ON . TO ‘dbuser’@‘%’ IDENTIFIED BY ‘StrongPass!’ REQUIRE SSL;
- 连接校验:命令行执行 \s 或查询 SHOW VARIABLES LIKE ‘%ssl%’; 确认 have_ssl=YES
- PHP 连接示例(PDO):
- $dsn = “mysql:host=127.0.0.1;dbname=test;charset=utf8mb4”;
- $options = [PDO::MYSQL_ATTR_SSL_CA => ‘/path/ca-cert.pem’, PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false];
- new PDO($dsn, $user, $pass, $options);
- 说明:为数据库客户端与服务器之间的链路启用 SSL/TLS,可显著降低凭据与数据在传输中被窃听的风险。
三、应用层加密 PHP 实现
- 对称加密(推荐 AES-256-GCM):适合大批量业务数据;使用 openssl_encrypt/decrypt 或 sodium_crypto_secretbox(libsodium)。示例要点:
- 生成 256 位密钥 与 12 字节随机 Nonce;
- 加密返回 密文||Tag(GCM 模式自带认证);
- 解密前校验 Tag,严禁复用 Nonce。
- 非对称加密(RSA-OAEP):适合加密对称密钥、短敏感信息;示例要点:
- 生成 2048/4096 位 RSA 密钥对;
- 用公钥加密对称密钥,私钥解密;
- 结合 AES-GCM 实现混合加密。
- 密钥管理:密钥与 IV/Nonce 分开存储,严禁硬编码;生产环境使用 KMS/HSM 或至少采用 配置文件外置 + 权限最小化 + 定期轮换。
- 说明:应用层加密可实现端到端保护,即使数据库被拖库,敏感字段仍保持加密状态。
四、静态数据加密与系统层加固
- 磁盘/分区加密(LUKS/dm-crypt):保护数据库数据目录、日志与备份;示例:
- 初始化:cryptsetup luksFormat /dev/sdX
- 打开:cryptsetup luksOpen /dev/sdX enc_vol
- 格式化与挂载:mkfs.ext4 /dev/mapper/enc_vol;mount /dev/mapper/enc_vol /data
- 文件级与备份加密:对导出的 SQL/备份 使用 GPG/OpenSSL 加密归档,传输与存放均保持加密态。
- 数据库层加密选项:如 MySQL 企业版 TDE(磁盘文件透明加密);社区版可采用 InnoDB 表空间加密(5.7+) 或 列级加密(应用层实现更灵活)。
- 配套加固:
- 仅开放必要端口(如 80/443),启用 防火墙/安全组;
- 禁用 SSLv2/SSLv3/弱套件,仅启用 TLS 1.2/1.3;
- 限制数据库远程访问来源,最小权限授权;
- 定期备份并验证可恢复性。