如何启用 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 和保持加密套件的更新是维持安全性的关键步骤。

相关推荐
威桑7 小时前
HTTP/HTTPS 中 GET 请求和 POST 请求的区别与联系
网络协议·http·https
CryptoRzz8 小时前
对接股票金融数据源API
网络·python·websocket·网络协议·金融
沉默的煎蛋9 小时前
深入理解 TCP 三次握手与四次挥手
java·网络·数据结构·网络协议·tcp/ip
TSINGSEE9 小时前
EasyRTC嵌入式音视频通话SDK:微信生态支持、轻量化架构与跨平台兼容性(Linix/Windows/ARM/Android/iOS/LiteOS)
arm开发·网络协议·微信·架构·音视频·webrtc·智能硬件
WIFI_BT_DEV9 小时前
WIFI p2p连接总结
arm开发·驱动开发·物联网·网络协议·信息与通信·p2p·iot
阿龍178712 小时前
一个简单的RPC示例:服务端和客户端
c++·网络协议·rpc
木木Chan12 小时前
基于QUIC协议的HTTP3,了解一下
前端·网络协议
柃歌12 小时前
【USTC 计算机网络】第二章:应用层 - 应用层原理
笔记·websocket·网络协议·tcp/ip·计算机网络
王 富贵12 小时前
HTTP和RPC的区别
网络协议·http·rpc