debian

Debian LNMP SSL证书如何安装

小樊
37
2025-10-02 01:00:28
栏目: 云计算

Debian LNMP环境下安装SSL证书指南

在Debian系统上为LNMP(Linux+Nginx+MySQL+PHP)环境安装SSL证书,主要分为获取证书配置Nginx使用SSL(可选)配置MySQL/PHP支持SSL三大步骤。以下是详细操作流程:

一、准备工作

确保系统已安装LNMP基础组件(Nginx、MySQL、PHP),若未安装可通过以下命令快速部署:

sudo apt update
sudo apt install nginx mysql-server php libapache2-mod-php php-mysql

安装完成后,启动并启用Nginx、MySQL服务:

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl start mysql
sudo systemctl enable mysql

二、获取SSL证书(以Let’s Encrypt免费证书为例)

1. 安装Certbot工具

Certbot是Let’s Encrypt的官方客户端,可自动化证书申请与Nginx配置:

sudo apt install certbot python3-certbot-nginx

2. 申请并自动配置证书

运行以下命令,替换yourdomain.com为你的实际域名(需提前解析到服务器IP):

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

执行过程中,Certbot会提示:

Certbot会自动完成以下操作:

三、手动配置Nginx使用SSL(若未使用Certbot自动配置)

若需自定义SSL配置(如调整加密协议、密码套件),可手动编辑Nginx站点配置文件:

sudo nano /etc/nginx/sites-available/yourdomain.com

添加或修改以下内容(关键参数说明见注释):

# HTTP监听(强制跳转HTTPS)
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}

# HTTPS监听(核心配置)
server {
    listen 443 ssl;
    server_name yourdomain.com www.yourdomain.com;

    # 证书文件路径(需替换为实际路径)
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    # 引入Let's Encrypt提供的优化配置(包含推荐的协议、密码套件)
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # 网站根目录与PHP处理
    root /var/www/yourdomain.com;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 根据PHP版本调整
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 禁止访问.htaccess文件
    location ~ /\.ht {
        deny all;
    }
}

保存文件后,创建符号链接启用站点(若未创建sites-availablesites-enabled的链接):

sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/

四、验证与测试

1. 检查Nginx配置语法

sudo nginx -t

若输出syntax is oktest is successful,说明配置无错误。

2. 重启Nginx应用配置

sudo systemctl restart nginx

3. 验证SSL有效性

五、配置自动续期(Let’s Encrypt证书有效期90天)

Certbot会自动创建定时任务(通常位于/etc/cron.d/certbot),定期尝试续期证书。可手动测试续期流程:

sudo certbot renew --dry-run

若输出Congratulations, all renewals succeeded,说明自动续期配置正常。

六、(可选)配置MySQL支持SSL

若需MySQL数据库支持SSL加密连接(适用于敏感数据传输),可按以下步骤操作:

1. 生成MySQL SSL证书与密钥

sudo mkdir -p /etc/mysql/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /etc/mysql/ssl/mysql-key.pem \
    -out /etc/mysql/ssl/mysql-cert.pem

2. 配置MySQL服务器

编辑MySQL配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf),在[mysqld]部分添加:

[mysqld]
ssl-ca=/etc/mysql/ssl/mysql-cert.pem
ssl-cert=/etc/mysql/ssl/mysql-cert.pem
ssl-key=/etc/mysql/ssl/mysql-key.pem

3. 重启MySQL服务

sudo systemctl restart mysql

4. 验证MySQL SSL连接

登录MySQL并检查SSL状态:

mysql -u root -p --ssl-mode=REQUIRED

执行以下SQL语句,若have_ssl值为YES,则表示配置成功:

SHOW VARIABLES LIKE '%ssl%';

七、(可选)配置PHP支持SSL

PHP应用(如WordPress、Laravel)需确保能处理HTTPS请求,可通过以下方式配置:

1. 强制PHP-FPM监听Unix Socket(默认已支持SSL)

编辑PHP-FPM配置文件(/etc/php/7.4/fpm/pool.d/www.conf),确保listen指令为Socket模式:

listen = /run/php/php7.4-fpm.sock

重启PHP-FPM服务:

sudo systemctl restart php7.4-fpm

2. 在PHP代码中检查HTTPS

在应用入口文件(如index.php)顶部添加以下代码,强制跳转HTTP到HTTPS:

if ($_SERVER['HTTPS'] != "on") {
    $redirect = "https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    header("Location: $redirect");
    exit();
}

通过以上步骤,Debian LNMP环境即可完成SSL证书安装与配置,实现网站与数据库的HTTPS加密传输。

0
看了该问题的人还看了