凌峰创科服务平台

Linux搭建HTTPS服务器,证书如何配置?

  1. 获取 SSL/TLS 证书:这是建立 HTTPS 连接的凭证,用于证明你的服务器身份,并加密数据传输。
  2. 安装 Web 服务器:Nginx 或 Apache,它们将处理 HTTP/HTTPS 请求并提供网站内容。
  3. 配置 Web 服务器:让服务器知道如何使用证书来处理 HTTPS 流量,并通常将 HTTP 流量重定向到 HTTPS。
  4. 启动并测试服务:确保配置正确,服务正常运行。

下面我将以目前最流行、性能高效的 Nginx 作为 Web 服务器,并使用免费的 Let's Encrypt 证书为例,为你提供一个详细、可操作的指南。

Linux搭建HTTPS服务器,证书如何配置?-图1
(图片来源网络,侵删)

核心概念

  • HTTPS (Hypertext Transfer Protocol Secure):HTTP 的安全版本,通过 SSL/TLS 协议对通信内容进行加密。
  • SSL/TLS 证书:由受信任的证书颁发机构签发的数字文件,包含了服务器的公钥和一些身份信息,浏览器会验证这个证书的有效性。
  • Let's Encrypt:一个免费的、自动化的、开放的证书颁发机构,是目前个人和小型网站的首选。
  • Nginx:一个高性能的 HTTP 和反向代理服务器,也常用作邮件代理服务器。

详细步骤:使用 Nginx 和 Let's Encrypt

第 0 步:准备工作

  1. 一台 Linux 服务器:推荐使用 Ubuntu 20.04/22.04 或 CentOS 7/8,本教程以 Ubuntu 为例。
  2. 一个域名yourdomain.com,你需要将这个域名的 DNS A 记录指向你服务器的公网 IP 地址。
  3. 服务器上拥有 root 权限,或者一个具有 sudo 权限的用户。

第 1 步:安装 Nginx

更新你的系统包列表,然后安装 Nginx。

# 更新包列表
sudo apt update
# 安装 Nginx
sudo apt install nginx -y

安装完成后,Nginx 通常会自动启动,你可以检查它的状态:

sudo systemctl status nginx

如果看到 active (running),说明 Nginx 已经成功运行,你可以在浏览器中访问你的服务器 IP 地址,应该能看到 Nginx 的欢迎页面。

第 2 步:配置服务器防火墙

为了允许外部访问 Nginx,你需要打开 HTTP (80) 和 HTTPS (443) 端口。

Linux搭建HTTPS服务器,证书如何配置?-图2
(图片来源网络,侵删)
# 允许 Nginx 的 Full 配置(包含 HTTP 和 HTTPS)
sudo ufw allow 'Nginx Full'
# 如果只想分别开放
# sudo ufw allow 80/tcp
# sudo ufw allow 443/tcp

第 3 步:安装 Certbot (Let's Encrypt 客户端)

Certbot 是一个强大的工具,可以自动获取和续签 Let's Encrypt 证书。

# 安装 Certbot 及其 Nginx 插件
sudo apt install certbot python3-certbot-nginx -y

第 4 步:获取 SSL 证书

Certbot 可以自动检测 Nginx 的配置并获取证书,这是最简单的方法。

# 运行 Certbot,它会自动与 Nginx 交互
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

命令解释

  • --nginx:告诉 Certbot 使用 Nginx 插件。
  • -d yourdomain.com:为你的主域名申请证书。
  • -d www.yourdomain.com:为你的 www 子域名也申请证书(可选,但推荐)。

运行此命令后,Certbot 会:

  1. 提示你输入一个邮箱地址,用于证书过期通知和恢复流程。
  2. 询问你是否同意 Let's Encrypt 的服务条款。
  3. 关键步骤:询问你是否将 HTTP 流量自动重定向到 HTTPS。强烈建议选择 2: Redirect,这会自动帮你完成安全配置。

如果一切顺利,Certbot 会成功获取证书,并自动修改你的 Nginx 配置文件,使其支持 HTTPS。

第 5 步:验证 Nginx 配置并重启服务

Certbot 已经修改了配置,但最好我们自己再检查一下。

  1. 检查配置语法

    sudo nginx -t

    如果看到 syntax is oktest is successful,说明配置文件没有语法错误。

  2. 重启 Nginx 使新配置生效

    sudo systemctl restart nginx

第 6 步:测试你的 HTTPS 服务器

打开浏览器,访问 https://yourdomain.com

  • 你应该能看到你的网站内容。
  • 浏览器地址栏会显示一个锁形图标,表明连接是安全的。
  • 你还可以使用一些在线工具(如 SSL Labs' SSL Test)来测试你的 SSL 配置是否安全、评分高低。

手动配置 Nginx (进阶)

如果你不想使用 Certbot 的自动配置功能,或者你的 Nginx 配置比较特殊,你可以手动完成配置。

创建 Nginx 配置文件

/etc/nginx/sites-available/ 目录下为你的网站创建一个配置文件,yourdomain.com

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

并根据你的实际情况进行修改:

# 监听 80 端口 (HTTP),并将其重定向到 443 端口 (HTTPS)
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    # 强制重定向到 HTTPS
    return 301 https://$host$request_uri;
}
# 监听 443 端口 (HTTPS)
server {
    # 监听所有 IPv4 地址的 443 端口
    listen 443 ssl http2;
    # 监听所有 IPv6 地址的 443 端口
    listen [::]:443 ssl http2;
    server_name yourdomain.com www.yourdomain.com;
    # SSL 证书配置 (路径由 Certbot 自动生成)
    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_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    # 网站根目录
    root /var/www/yourdomain.com/html;
    index index.html index.htm;
    location / {
        try_files $uri $uri/ =404;
    }
}

启用新配置

创建符号链接将配置文件从 sites-available 链接到 sites-enabled

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

测试并重启 Nginx

与之前一样,测试配置并重启服务。

sudo nginx -t
sudo systemctl restart nginx

自动续签 Let's Encrypt 证书

Let's Encrypt 的证书有效期为 90 天,所以必须定期续签,幸运的是,Certbot 已经设置了一个定时任务来自动完成这个操作。

你可以检查这个定时任务:

sudo systemctl status certbot.timer

确保它的状态是 active (enabled),它会每天检查一次,并在证书到期前自动续签。


常见问题与解决方案

  • 问题:浏览器访问 HTTPS 显示“不安全”或证书错误。

    • 原因:证书域名与访问的域名不匹配,或者证书路径配置错误。
    • 解决:仔细检查 Nginx 配置文件中的 server_namessl_certificate 路径是否正确。
  • 问题nginx: [emerg] unknown directive "ssl" 错误。

    • 原因:Nginx 在编译时没有启用 SSL 模块,或者 nginx.conf 中没有加载 ssl_module,这种情况在标准安装的 Nginx 中很少见。
    • 解决sudo apt install nginx 会自动包含所有标准模块,如果确实缺少,可能需要重新编译 Nginx。
  • 问题:Certbot 获取证书失败,提示 DNS 或连接问题。

    • 原因:你的域名 DNS 记录没有正确指向服务器 IP,或者服务器防火墙阻止了 80/443 端口。
    • 解决:使用 dig yourdomain.comnslookup yourdomain.com 检查 DNS 解析是否正确,使用 sudo ufw status 检查防火墙规则。

搭建 HTTPS 服务器的核心流程是:

  1. 安装 Nginx 作为 Web 服务器。
  2. 使用 Certbot 免费获取 Let's Encrypt 证书。
  3. 配置 Nginx 使用该证书,并强制 HTTP 到 HTTPS 的重定向。
  4. 启用并测试,确保一切正常。
  5. 信任 Certbot 的自动续签机制,无需手动干预。

通过以上步骤,你就可以在 Linux 上成功搭建一个安全、可靠的 HTTPS 服务器了。

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