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

- HTTPS (HyperText Transfer Protocol Secure):安全的 HTTP 协议,它通过 SSL/TLS 协议对通信数据进行加密,防止数据在传输过程中被窃听或篡改。
- SSL/TLS 证书:一个由受信任的证书颁发机构签发的数字文件,用于验证服务器的身份,并建立加密连接,它包含了服务器的公钥、域名信息、颁发机构等。
- CA (Certificate Authority):证书颁发机构,是受信任的第三方组织,负责验证和签发 SSL 证书,常见的有 Let's Encrypt, DigiCert, GlobalSign 等。
- Let's Encrypt:一个免费的、自动化的、开放的证书颁发机构,是目前个人和小型网站获取 SSL 证书的首选。
准备工作
在开始搭建之前,请确保您已经具备以下条件:
- 一台 Linux 服务器:推荐使用 Ubuntu 20.04/22.04 或 CentOS 7/8 等主流发行版。
- 一个已注册的域名:
yourdomain.com。 - 域名解析:将您的域名解析到服务器的公网 IP 地址,您可以在您的域名注册商(如 GoDaddy, Namecheap, 阿里云等)的控制面板中设置。
- 服务器上安装了 Web 服务器:这里我们以 Nginx 和 Apache 为例。
- 拥有服务器的
sudo或root权限。
第一步:获取免费的 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 系统:

# 安装 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 插件获取证书:

# -d 后面跟您的域名,可以写多个 # --apache 表示使用 Apache 插件 sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
执行命令后,Certbot 会:
- 提示您输入邮箱地址(用于续订提醒和安全通知)。
- 询问您是否同意 Let's Encrypt 的服务条款。
- (重要) 询问您如何配置 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 成功,说明自动续订机制已经设置好,您无需进行任何额外操作。
总结与检查
- 访问您的网站:在浏览器中输入
https://yourdomain.com。 - 检查安全状态:
- 地址栏应该显示一个锁形图标。
- 点击锁形图标,查看证书信息,确保颁发机构是 "Let's Encrypt",域名和有效期都正确。
- 使用在线工具测试:访问 SSL Labs Server Test,输入您的域名进行全面的 SSL/TLS 配置测试,可以获得安全评分和优化建议。
至此,您已经成功在 Linux 服务器上搭建了一个功能完备的 HTTPS 服务器!
