如何启用 HTTPS 并配置免费的 SSL 证书

引言

HTTPS 已成为现代网站安全性的基础要求。通过 SSL/TLS 证书对数据进行加密,不仅可以保护用户隐私,还能提升搜索引擎排名并增强用户信任。本指南将详细介绍如何通过 Let's Encrypt(免费、自动化的证书颁发机构)为您的网站启用 HTTPS,并涵盖主流服务器(Nginx/Apache/IIS/Tomcat)的配置方法。


一、准备工作

  1. 域名所有权

    确保已拥有一个已解析到服务器 IP 的域名(如 example.com)。

  2. 服务器权限

    需具备服务器的 root 或管理员权限。

  3. 开放端口

    确保服务器防火墙开放 80(HTTP)443(HTTPS) 端口。


二、获取免费 SSL 证书(Let's Encrypt)

方法 1:使用 Certbot 自动化工具(推荐)

Certbot 是 Let's Encrypt 官方推荐的证书管理工具,支持自动申请和续期。

bash

复制

复制代码
# 安装 Certbot(以 Ubuntu 为例)
sudo apt update
sudo apt install certbot

# 申请证书(适用于 Nginx/Apache)
sudo certbot certonly --nginx      # 如果使用 Nginx
sudo certbot certonly --apache     # 如果使用 Apache

# 手动模式(适用于其他服务器)
sudo certbot certonly --manual --preferred-challenges dns -d example.com -d www.example.com
  • 证书路径:/etc/letsencrypt/live/example.com/

    包含以下关键文件:

    • fullchain.pem: 证书链

    • privkey.pem: 私钥

方法 2:手动生成证书(适用于高级用户)

  1. 生成 CSR(证书签名请求)和私钥:

    bash

    复制

    复制代码
    openssl req -new -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr
  2. 通过 Let's Encrypt 或其他 ACME 客户端完成域名验证(DNS 或 HTTP 验证)。


三、配置服务器 SSL 证书

1. Nginx 配置示例

编辑站点配置文件(如 /etc/nginx/sites-available/example.com):

nginx

复制

复制代码
server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # 启用 TLS 1.3 和现代加密套件
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers on;

    # 其他配置...
}

# 强制 HTTP 跳转到 HTTPS
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

重启服务:

bash

复制

复制代码
sudo systemctl restart nginx

2. Apache 配置示例

编辑虚拟主机文件(如 /etc/apache2/sites-available/example.com.conf):

apache

复制

复制代码
<VirtualHost *:443>
    ServerName example.com

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    # 启用 HSTS
    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
</VirtualHost>

# 重定向 HTTP 到 HTTPS
<VirtualHost *:80>
    ServerName example.com
    Redirect permanent / https://example.com/
</VirtualHost>

启用模块并重启:

bash

复制

复制代码
sudo a2enmod ssl
sudo systemctl restart apache2

3. IIS 配置(Windows Server)

  1. 打开 IIS 管理器 → 选择站点 → 绑定 → 添加 HTTPS 绑定。

  2. 导入证书:

    • fullchain.pemprivkey.pem 合并为 PFX 格式:

      bash

      复制

      复制代码
      openssl pkcs12 -export -out certificate.pfx -inkey privkey.pem -in fullchain.pem
    • 在 IIS 中选择导入的 PFX 文件,并设置密码。

4. Tomcat 配置(Java 环境)

编辑 server.xml

xml

复制

复制代码
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateFile="/path/to/fullchain.pem"
                     certificateKeyFile="/path/to/privkey.pem"
                     type="RSA" />
    </SSLHostConfig>
</Connector>

运行 HTML


四、证书自动续期

Let's Encrypt 证书有效期为 90 天,需定期续期。

bash

复制

复制代码
# 测试续期命令
sudo certbot renew --dry-run

# 添加定时任务(crontab -e)
0 3 * * * /usr/bin/certbot renew --quiet

五、验证与故障排除

  1. 在线检测工具

  2. 常见错误

    • 证书不信任:确保证书链完整(包含中间证书)。

    • 混合内容警告:页面内资源(如图片、JS)必须全部使用 HTTPS。

    • 端口冲突:确保没有其他进程占用 80/443 端口。


六、总结

通过 Let's Encrypt 和自动化工具,您可以零成本实现 HTTPS 的部署。定期检查证书状态、启用 HSTS 和保持加密套件的更新是维持安全性的关键步骤。

相关推荐
小时前端9 小时前
HTTPS 页面加载 HTTP 脚本被拦?同源代理来救场
前端·https
YuMiao9 小时前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
Jony_3 天前
高可用移动网络连接
网络协议
chilix3 天前
Linux 跨网段路由转发配置
网络协议
gihigo19985 天前
基于TCP协议实现视频采集与通信
网络协议·tcp/ip·音视频
白太岁5 天前
通信:(5) 电路交换、报文交换与分组交换
运维·服务器·网络·网络协议
EasyGBS5 天前
国标安全升级:GB28181平台EasyGBS支持GB35114协议的应用场景与核心优势
网络协议·安全·gb28181·gb35114
凯酱5 天前
Windows防火墙入站规则IP白名单
windows·网络协议·tcp/ip
稻草猫.5 天前
TCP与UDP:传输层协议深度解析
笔记·后端·网络协议
赤月奇5 天前
https改为http
数据挖掘·https·ssl