凌峰创科服务平台

Linux如何搭建HTTPS服务器?

核心概念

在开始之前,我们先简单理解几个关键概念:

Linux如何搭建HTTPS服务器?-图1
(图片来源网络,侵删)
  1. HTTPS (HyperText Transfer Protocol Secure):安全的 HTTP 协议,它通过 SSL/TLS 协议对通信数据进行加密,防止数据在传输过程中被窃听或篡改。
  2. SSL/TLS 证书:一个由受信任的证书颁发机构签发的数字文件,用于验证服务器的身份,并建立加密连接,它包含了服务器的公钥、域名信息、颁发机构等。
  3. CA (Certificate Authority):证书颁发机构,是受信任的第三方组织,负责验证和签发 SSL 证书,常见的有 Let's Encrypt, DigiCert, GlobalSign 等。
  4. Let's Encrypt:一个免费的、自动化的、开放的证书颁发机构,是目前个人和小型网站获取 SSL 证书的首选。

准备工作

在开始搭建之前,请确保您已经具备以下条件:

  1. 一台 Linux 服务器:推荐使用 Ubuntu 20.04/22.04 或 CentOS 7/8 等主流发行版。
  2. 一个已注册的域名yourdomain.com
  3. 域名解析:将您的域名解析到服务器的公网 IP 地址,您可以在您的域名注册商(如 GoDaddy, Namecheap, 阿里云等)的控制面板中设置。
  4. 服务器上安装了 Web 服务器:这里我们以 NginxApache 为例。
  5. 拥有服务器的 sudoroot 权限

第一步:获取免费的 SSL 证书 (Let's Encrypt)

我们将使用 Certbot 工具,它是由 Let's Encrypt 官方推荐的客户端,可以自动获取和续订证书。

安装 Certbot

对于 Ubuntu/Debian 系统:

# 更新软件包列表
sudo apt update
# 安装 Certbot 和 Nginx 插件 (如果用 Nginx)
sudo apt install certbot python3-certbot-nginx
# 或者安装 Apache 插件 (如果用 Apache)
# sudo apt install certbot python3-certbot-apache

对于 CentOS/RHEL 系统:

Linux如何搭建HTTPS服务器?-图2
(图片来源网络,侵删)
# 安装 EPEL 仓库
sudo yum install -y epel-release
# 更新软件包列表
sudo yum update
# 安装 Certbot 和 Nginx 插件 (如果用 Nginx)
sudo yum install certbot python3-certbot-nginx
# 或者安装 Apache 插件 (如果用 Apache)
# sudo yum install certbot python3-certbot-apache

使用 Certbot 获取证书

Certbot 可以通过两种方式获取证书:

  • Webroot 模式:推荐,它会在您的网站根目录下创建一个临时文件来验证域名的所有权,不会中断您的网站服务。
  • Nginx/Apache 插件模式:更简单,Certbot 会自动修改您的 Web 服务器配置文件来添加验证,并自动配置 HTTPS,对于新手来说更友好。

这里我们以 Nginx 插件模式 为例,因为它最自动化。

使用 Nginx 插件获取证书:

# -d 后面跟您的域名,可以写多个
# --nginx 表示使用 Nginx 插件
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

使用 Apache 插件获取证书:

Linux如何搭建HTTPS服务器?-图3
(图片来源网络,侵删)
# -d 后面跟您的域名,可以写多个
# --apache 表示使用 Apache 插件
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com

执行命令后,Certbot 会:

  1. 提示您输入邮箱地址(用于续订提醒和安全通知)。
  2. 询问您是否同意 Let's Encrypt 的服务条款。
  3. (重要) 询问您如何配置 HTTPS:
    • Redirect - 将所有 HTTP 流量重定向到 HTTPS。(推荐生产环境使用)
    • No redirect - 仅获取证书,不修改配置,您可以稍后手动配置。

选择 Redirect 并按回车。

如果一切顺利,Certbot 会成功获取证书,并自动为您配置好 Nginx 或 Apache 的 HTTPS 设置。


第二步:验证和配置 Web 服务器

使用 Certbot 插件(已自动配置)

如果您在上一步选择了使用 --nginx--apache 插件,那么您的服务器配置已经基本完成。

验证 Nginx 配置:

# 检查 Nginx 配置文件语法是否正确
sudo nginx -t
# 如果显示 syntax is ok 和 test is successful,则重载 Nginx 使新配置生效
sudo systemctl reload nginx

验证 Apache 配置:

# 检查 Apache 配置文件语法
sudo apachectl configtest
# 如果显示 Syntax OK,则重启 Apache
sudo systemctl restart apache2

您可以打开浏览器,访问 https://yourdomain.com,您应该能看到一个安全的锁形图标了。

手动配置(或使用 Webroot 模式获取证书后)

如果您是手动获取的证书,或者想自己修改配置,可以参考下面的示例。

SSL 证书文件位置

Let's Encrypt 的证书通常存放在以下位置:

  • 证书链文件: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
  • 私钥文件: /etc/letsencrypt/live/yourdomain.com/privkey.pem

Nginx 手动配置

编辑您的 Nginx 配置文件,通常位于 /etc/nginx/sites-available/yourdomain.com

server {
    # 监听 80 端口,并重定向到 HTTPS
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}
server {
    # 监听 443 端口,启用 SSL
    listen 443 ssl http2;
    server_name yourdomain.com www.yourdomain.com;
    # SSL 证书配置
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
    # 安全增强配置 (强烈推荐)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
    # 网站根目录和配置
    root /var/www/html;
    index index.html index.htm;
    location / {
        try_files $uri $uri/ =404;
    }
}

保存文件后,执行 sudo nginx -t 检查语法,sudo systemctl reload nginx 重载配置。

Apache 手动配置

编辑您的 Apache 虚拟主机配置文件,通常位于 /etc/apache2/sites-available/yourdomain.com.conf

# 80 端口配置,重定向到 HTTPS
<VirtualHost *:80>
    ServerName yourdomain.com
    ServerAlias www.yourdomain.com
    Redirect permanent / https://yourdomain.com/
</VirtualHost>
# 443 端口配置,启用 SSL
<VirtualHost *:443>
    ServerName yourdomain.com
    ServerAlias www.yourdomain.com
    # SSL 证书配置
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
    # 安全增强配置 (强烈推荐)
    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite HIGH:!aNULL:!MD5
    # 网站根目录和配置
    DocumentRoot /var/www/html
    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

保存文件后,启用必要的 Apache 模块并重启服务:

# 启用 SSL 和重写模块
sudo a2enmod ssl
sudo a2enmod rewrite
# 启用您的新站点配置
sudo a2ensite yourdomain.com.conf
# 禁用默认站点 (可选)
sudo a2dissite 000-default.conf
# 检查配置并重启 Apache
sudo apache2ctl configtest
sudo systemctl restart apache2

第三步:设置自动续订 Let's Encrypt 证书

Let's Encrypt 的证书有效期为 90 天,因此必须定期续订,幸运的是,Certbot 提供了自动续订的功能。

Certbot 通常会通过 cron 任务设置一个定时器,每天检查证书是否需要续订,您可以通过以下命令检查:

# 查看定时器状态
systemctl status certbot.timer
# 手动测试续订过程(这不会更新证书,只是检查)
sudo certbot renew --dry-run

dry-run 成功,说明自动续订机制已经设置好,您无需进行任何额外操作。


总结与检查

  1. 访问您的网站:在浏览器中输入 https://yourdomain.com
  2. 检查安全状态
    • 地址栏应该显示一个锁形图标
    • 点击锁形图标,查看证书信息,确保颁发机构是 "Let's Encrypt",域名和有效期都正确。
  3. 使用在线工具测试:访问 SSL Labs Server Test,输入您的域名进行全面的 SSL/TLS 配置测试,可以获得安全评分和优化建议。

至此,您已经成功在 Linux 服务器上搭建了一个功能完备的 HTTPS 服务器!

分享:
扫描分享到社交APP
上一篇
下一篇