下面我将为您详细解释网站如何使用 HTTPS 访问,整个过程可以分为理解原理获取证书配置服务器强制跳转四个主要步骤。

网站如何使用https访问网站
(图片来源网络,侵删)

第一步:理解 HTTPS 的核心原理

在开始操作前,简单理解 HTTPS 是什么,有助于你更好地完成配置。

  • HTTP (HyperText Transfer Protocol):超文本传输协议,它是浏览器和服务器之间沟通的语言,但数据是明文传输的,就像寄一封没有封口的信,任何人(如黑客、网络运营商)在中间都可能窃取或篡改信息。
  • HTTPS (HTTP Secure):安全超文本传输协议,它在 HTTP 的基础上加入了一个SSL/TLS 加密层,它的工作流程可以简化为:
    1. 申请证书:网站所有者向一个受信任的证书颁发机构 申请一个数字证书,这个证书就像是网站的“身份证”,证明了“这个网站确实是它所声称的那个网站”。
    2. 验证证书:当用户通过浏览器访问你的网站时(https://yourdomain.com),浏览器会向你的服务器请求这个证书。
    3. 建立安全连接:服务器将证书发送给浏览器,浏览器会检查证书是否由受信任的机构颁发、是否过期、域名是否匹配,如果一切正常,浏览器和服务器会使用证书中的公钥和私钥,协商出一个临时的会话密钥,之后所有的通信都会通过这个密钥进行加密和解密。

HTTPS 的好处:

  • 数据安全:防止数据在传输过程中被窃听或篡改。
  • 提升用户信任:浏览器地址栏会显示一个安全锁图标,给用户安全感。
  • SEO 优势:Google 等搜索引擎优先收录 HTTPS 网站。
  • 现代网络要求:许多现代 Web 功能(如 Service Worker, HTTP/2)都需要 HTTPS 才能使用。

第二步:获取 SSL/TLS 证书

要启用 HTTPS,你必须先有一个 SSL/TLS 证书,获取证书的途径主要有以下几种:

免费证书 (强烈推荐个人博客和小型网站使用)

这是目前最流行、最经济的方式。

网站如何使用https访问网站
(图片来源网络,侵删)
  • Let's Encrypt:一个非营利性的证书颁发机构,提供免费的、自动化的、可信任的 SSL 证书,它的证书有效期为 90 天,但可以自动续期。
  • 获取方式:通常通过你的主机服务商控制面板(如 cPanel、Plesk)一键安装,或者使用 Certbot 等工具在服务器上自动申请和部署,绝大多数现代主机服务商都集成了 Let's Encrypt 的自动部署功能。

付费证书 (适用于大型企业或对品牌有特殊要求的网站)

付费证书通常提供更高的保险额度、更严格的验证流程和额外的品牌标识。

  • 来源:可以从证书颁发机构如 DigiCert, Sectigo, GlobalSign 等购买。
  • 类型
    • 域名验证型:验证你对域名的控制权,最便宜。
    • 组织验证型:除了验证域名,还会验证申请单位的真实性,地址栏会显示公司名称。
    • 扩展验证型:最严格的验证,地址栏会显示绿色的公司名称,成本最高。

云服务商提供的证书

如果你使用的是云服务器(如阿里云、腾讯云、AWS、Google Cloud),它们通常也提供免费的 SSL 证书服务,并且可以方便地在负载均衡器或 CDN 服务上进行配置。


第三步:在服务器上配置 HTTPS

获取到证书文件后,你需要将它们配置到你的 Web 服务器上,证书文件通常包括:

  • 证书文件:如 yourdomain.com.crtpublic.crt
  • 私钥文件:如 yourdomain.com.keyprivate.key这个文件非常重要,必须保密!

以下是几种主流服务器的配置示例:

网站如何使用https访问网站
(图片来源网络,侵删)

Nginx

Nginx 的配置文件通常在 /etc/nginx/sites-available//etc/nginx/conf.d/ 目录下。

server {
    listen 80; # 监听 HTTP 端口
    server_name yourdomain.com www.yourdomain.com;
    # 将所有 HTTP 请求重定向到 HTTPS
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl http2; # 监听 HTTPS 端口
    server_name yourdomain.com www.yourdomain.com;
    # 指定 SSL 证书和私钥的路径
    ssl_certificate /path/to/your/fullchain.pem; # 或 yourdomain.com.crt
    ssl_certificate_key /path/to/your/privkey.pem; # 或 yourdomain.com.key
    # 优化 SSL 安全设置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers '...'; # 推荐使用 ciphers.io 生成
    ssl_prefer_server_ciphers on;
    # 你的网站根目录和其他配置...
    root /var/www/html;
    index index.html index.htm;
    location / {
        try_files $uri $uri/ =404;
    }
}

配置完成后,执行 sudo nginx -t 测试配置,sudo systemctl reload nginx 重载 Nginx。

Apache

Apache 的配置文件通常在 /etc/apache2/sites-available/ 目录下。

<VirtualHost *:80>
    ServerName yourdomain.com
    ServerAlias www.yourdomain.com
    # 将所有 HTTP 请求重定向到 HTTPS
    Redirect permanent / https://yourdomain.com/
</VirtualHost>
<VirtualHost *:443>
    ServerName yourdomain.com
    ServerAlias www.yourdomain.com
    # 指定 SSL 证书和私钥的路径
    SSLEngine on
    SSLCertificateFile /path/to/your/yourdomain.com.crt
    SSLCertificateKeyFile /path/to/your/yourdomain.com.key
    # 如果是 Let's Encrypt,可能还需要包含中间证书
    SSLCertificateChainFile /path/to/your/chain.pem
    # 你的网站根目录和其他配置...
    DocumentRoot /var/www/html
    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

配置完成后,执行 sudo a2enmod ssl 启用 SSL 模块,sudo a2ensite your-site-config.conf 启用你的站点配置,sudo systemctl reload apache2 重载 Apache。


第四步:强制使用 HTTPS 并进行最终检查

即使你配置了 HTTPS,用户仍然可能通过 http:// 访问你的网站,为了确保所有流量都通过安全的 HTTPS,你需要设置一个永久重定向 (301 Redirect)

这个重定向通常在上述的 Nginx 或 Apache 配置中已经包含(如 Nginx 的 return 301 和 Apache 的 Redirect permanent)。

最终检查清单

配置完成后,请务必进行以下检查:

  1. 使用在线工具检查

    • SSL Labs Server Test:这是最权威的测试工具,它会详细分析你的 SSL 配置,给出安全评分和优化建议,目标是获得一个 A 或 A+ 的评级。
    • Why No Padlock:检查你的网站是否有资源(如图片、CSS、JS)是通过 HTTP 加载的,这会导致安全锁图标消失。
  2. 手动检查浏览器

    • 在浏览器地址栏输入 https://yourdomain.com,确认地址栏左侧出现安全锁图标
    • 点击锁图标,查看证书信息,确认颁发机构是你申请的那个(如 Let's Encrypt)。
  3. 检查内部资源

    • F12 打开开发者工具,切换到 "Network"(网络)选项卡。
    • 刷新页面,检查所有请求的协议是否都是 https://,如果发现任何 http:// 的请求,你需要将这些资源的链接修改为相对路径或 https:// 开头的绝对路径。
  4. 配置 HSTS (HTTP Strict Transport Security) (可选但推荐):

    • HSTS 是一个 HTTP 头,它告诉浏览器在未来的特定时间内,只通过 HTTPS 访问该域名,完全禁止 HTTP 访问。
    • 在 Nginx 中添加:add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    • 在 Apache 中添加:Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
    • 注意:启用 HSTS 后,如果证书配置错误,你可能会暂时无法访问网站,请确保配置无误后再开启。

将网站升级到 HTTPS 的流程可以概括为:

  1. 购买/申请 SSL/TLS 证书(首选 Let's Encrypt 免费)。
  2. 上传/配置 证书文件