获取SSL证书 -> 在服务器上配置证书 -> 强制跳转HTTPS

网站https怎么弄的
(图片来源网络,侵删)

下面我会把每个步骤拆解开来,用通俗易懂的方式解释,并提供不同服务器环境的配置示例。


第一步:理解HTTPS和SSL证书

HTTPS = HTTP + SSL/TLS

  • HTTP:你网站现在使用的协议,数据是明文传输的,就像寄一封没有封口的信,任何人都可以看到内容。
  • SSL/TLS:一个安全协议,它会在你的服务器和访客的浏览器之间建立一个加密通道,数据传输时会被加密,就像把信装进一个上了锁的保险箱,只有拥有钥匙(证书)的人才能打开。

SSL证书:就是这个“锁”和“钥匙”的实体,它是一个由受信任的机构(称为CA,证书颁发机构)颁发的数字文件,包含了你的网站信息、公钥等,它的作用是:

  1. 验证身份:告诉浏览器,这个网站是真的你,而不是一个冒牌的钓鱼网站。
  2. 加密数据:确保数据在传输过程中不被窃取或篡改。

第二步:获取SSL证书

你有几种方式可以获取SSL证书,从免费到付费不等。

网站https怎么弄的
(图片来源网络,侵删)

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

最权威的免费证书颁发机构是 Let's Encrypt,它的证书免费、自动化、且受所有主流浏览器信任。

  • 如何获取? 你通常不需要直接去Let's Encrypt官网手动操作,很多服务器控制面板、主机商或工具已经集成了自动申请和续期功能,非常方便。

    • 如果你使用虚拟主机/共享主机: 你的主机商(如Bluehost, SiteGround, 腾讯云, 阿里云等)通常会提供免费的“Let's Encrypt”一键安装功能,登录你的主机控制面板,找到“安全性”、“SSL”或“网站设置”等选项,按照提示点击几下即可完成。

    • 如果你使用VPS或云服务器(如DigitalOcean, Vultr, 阿里云ECS): 你需要自己操作,可以使用工具来简化这个过程,最常用的是 Certbot

      1. 在你的服务器上安装Certbot。
      2. 运行Certbot命令,它会自动检测你的Web服务器(如Nginx或Apache),申请证书,并尝试自动配置好服务器,这是最推荐的方式。

付费证书

付费证书通常提供更多特性,

  • 更高的保障金额:如果因证书安全问题导致损失,CA会进行赔付。
  • 更严格的身份验证:需要提供更多的公司文件来证明网站所有权,适合企业、电商网站。
  • 通配符证书:可以保护一个主域名及其所有下一级子域名(*.yourdomain.com)。
  • 品牌和信任标识:一些证书会在浏览器地址栏显示品牌标识。

常见的付费CA机构有:DigiCert, Sectigo, GlobalSign等,你可以直接向它们购买,或者通过你的主机商购买。


第三步:在服务器上安装和配置SSL证书

这是技术性最强的一步,你需要将获取到的证书文件部署到你的Web服务器上。

场景1:使用虚拟主机控制面板(最简单)

  • 登录你的cPanel、Plesk或其他控制面板。
  • 找到 "SSL/TLS Status" 或 "SSL Management" 等类似选项。
  • 在你的域名旁边,点击 “Install SSL” 或 “管理SSL”。
  • 控制面板会自动使用你之前申请的免费Let's Encrypt证书,或者让你上传你购买的证书文件(通常需要三个文件:证书文件、私钥文件、中间证书链文件)。
  • 点击安装,等待几分钟即可。

场景2:使用Nginx服务器(命令行操作)

假设你已经用Certbot自动获取了证书,它会自动帮你配置好,如果你想手动配置,需要修改 nginx.conf 或站点的配置文件(通常在 /etc/nginx/sites-available/yourdomain)。

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    # 强制将HTTP请求重定向到HTTPS
    location / {
        return 301 https://$host$request_uri;
    }
}
server {
    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_ciphers '...'; # 使用强加密套件
    root /var/www/html;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}
  • 解释
    • 第一个 server 块监听80端口(HTTP),所有访问都通过 return 301 永久重定向到443端口(HTTPS)。
    • 第二个 server 块监听443端口,并加载你的证书文件和私钥文件。

场景3:使用Apache服务器(命令行操作)

同样,Certbot也能自动配置Apache,手动配置需要修改站点的配置文件(通常在 /etc/apache2/sites-available/yourdomain.conf)。

<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 /etc/letsencrypt/live/yourdomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
    # 可能还需要中间证书
    # SSLCertificateChainFile /etc/letsencrypt/live/yourdomain.com/chain.pem
    # 其他Apache配置...
    DocumentRoot /var/www/html
    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
  • 解释
    • 第一个 <VirtualHost *:80> 块使用 Redirect permanent 将HTTP流量重定向到HTTPS。
    • 第二个 <VirtualHost *:443> 块启用SSL并加载证书文件。

配置完成后,记得重启你的Web服务器使配置生效:

  • Nginx: sudo systemctl restart nginx
  • Apache: sudo systemctl restart apache2

第四步:强制所有访问都通过HTTPS

这是至关重要的一步!你不仅要让HTTPS可用,还要确保所有用户都通过HTTPS访问,否则就失去了HTTPS的意义。

方法1:服务器配置(推荐)

在上述Nginx和Apache的配置中,我们已经通过重定向实现了这一点,这是最可靠的方法。

方法2:使用.htaccess文件(适用于Apache主机)

如果你没有服务器的root权限,可以在网站的根目录下编辑或创建一个名为 .htaccess 的文件,加入以下代码:

# 开启重写引擎
RewriteEngine On
# 如果不是HTTPS连接,则重定向到HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

方法3:使用JavaScript代码(不推荐,作为备用)

这是一种客户端的补救方法,如果服务器配置失败,它可以在浏览器端进行跳转,但不如服务器端重定向可靠,且会在用户看到HTTP页面一闪后才跳转。

if (location.protocol !== 'https:') {
    location.replace(`https:${location.href.substring(location.protocol.length)}`);
}

第五步:验证和测试

完成所有配置后,务必进行全面测试:

  1. 浏览器地址栏:访问你的网站,地址栏应该显示一个锁形图标,点击它可以看到证书信息。
  2. SSL Labs测试:访问 SSL Server Test,输入你的域名,它会给你一个详细的评分(A+是最好的),并指出任何配置问题,目标是获得 A或A+
  3. 内部链接检查:检查网站上的所有链接(图片、CSS、JS文件、页面跳转等),确保它们都使用了 https:// 开头,可以使用像 Screaming Frog SEO Spider 这样的工具进行爬虫检查。
  4. 检查:浏览器控制台(按F12打开)可能会提示“Mixed Content”(混合内容)错误,意思是HTTPS页面中加载了HTTP的资源,必须将这些资源的URL也改为HTTPS。

第六步:设置自动续期(Let's Encrypt特有)

Let's Encrypt的证书有效期只有90天,所以必须设置自动续期,否则网站会在90天后无法访问。

  • Certbot用户:幸运的是,Certbot在安装时会自动设置一个定时任务(cron job)来定期续期证书,你可以通过运行 sudo crontab -l 来查看,通常它会每1-2个月自动运行一次,你无需任何操作。
  • 虚拟主机用户:大多数主机商的“一键安装”功能已经内置了自动续期机制,无需担心。

HTTPS配置流程回顾:

  1. 购买/获取证书:首选免费、自动的Let's Encrypt。
  2. 上传/部署证书:通过主机控制面板或服务器命令行,将证书文件安装到你的Web服务器上。
  3. 配置服务器:修改Nginx/Apache配置,让服务器监听443端口并使用证书。
  4. 强制跳转:配置服务器或.htaccess文件,将所有HTTP(80)流量永久重定向到HTTPS(443)。
  5. 全面测试:检查浏览器地址栏、SSL Labs评分、网站内部链接,确保万无一失。
  6. 设置自动续期:对于Let's Encrypt,确保Certbot的自动续期任务已设置。

虽然听起来步骤不少,但对于大多数现代主机和工具来说,整个过程已经变得非常自动化,对于新手,从虚拟主机控制面板的一键安装开始是最简单、最不容易出错的方式。