温馨提示×

如何在Linux LAMP中实现数据加密

小樊
39
2025-12-14 01:33:18
栏目: 网络安全

Linux LAMP数据加密落地指南

在 LAMP 架构中,建议从传输加密数据库链路加密应用层字段加密静态数据加密四个层面协同实施,形成端到端的数据保护闭环。

一、传输层加密 HTTPS TLS

  • 安装与启用模块:安装 OpenSSLApache 的 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/decryptsodium_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
    • 限制数据库远程访问来源,最小权限授权;
    • 定期备份并验证可恢复性。

0