网站加了HTTPS还是不安全?常见配置错误排查指南

a
admin
作者
2026-07-16
发布日期
约 7 分钟
阅读时间

“我的网站加了HTTPS,为什么浏览器还是说不安全?”这是很多站长遇到过的困惑。

问题往往不在证书本身,而在配置。 一个配置不当的HTTPS网站,安全性可能还不如HTTP。

常见的HTTPS配置错误

错误一:混合内容(Mixed Content)

网站通过HTTPS加载,但页面里混入了HTTP资源(图片、JS、CSS)。浏览器会认为页面不完整加密,地址栏小锁变成警告图标。

典型表现:首页是HTTPS,但某张图片用了 http:// 开头的URL,控制台报错”Mixed Content”。

解决办法

  • 把所有HTTP资源改成HTTPS
  • 用相对协议 //example.com/img.jpg
  • 添加CSP头强制升级:upgrade-insecure-requests

错误二:证书链不完整

服务器只配置了域名证书,没配置中间证书。浏览器无法建立完整的信任链,提示”证书无效”。

典型表现:电脑浏览器正常,手机浏览器报错;或Chrome正常,Firefox报错。

解决办法:把中间证书拼接到域名证书后面,生成fullchain.crt:

cat domain.crt intermediate.crt > fullchain.crt

Nginx配置用 ssl_certificate fullchain.crt 而不是单独的domain.crt。

错误三:HTTP没有301跳转到HTTPS

HTTP和HTTPS都能访问,用户可能通过HTTP进入,等于没加密。

解决办法:Nginx配置301跳转:

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

错误四:用了过时的加密算法

证书没问题,但服务器配置了弱加密算法(RC4、SHA-1、SSLv3等),浏览器会警告。

解决办法:Nginx配置现代加密套件:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;

错误五:HSTS没配置

HSTS(HTTP Strict Transport Security)告诉浏览器”以后只通过HTTPS访问本站”,防止SSL剥离攻击。

解决办法:添加响应头:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

如何检测HTTPS配置

在线检测工具

SSL Labs(推荐):访问 ssllabs.com/ssltest,输入域名检测。会给你的HTTPS配置打分(A+到F),并指出所有问题。

MySSL:国内检测工具,访问 myssl.com,中文界面,报告详细。

命令行检测

# 检测证书链
openssl s_client -connect example.com:443 -servername example.com

# 检测支持的协议和加密套件
nmap --script ssl-enum-ciphers -p 443 example.com

# 检测HSTS头
curl -I https://example.com | grep -i strict

一个合格的HTTPS配置应该具备

1. 有效的SSL证书:未过期、域名匹配、证书链完整

2. 强制HTTPS跳转:HTTP访问自动301到HTTPS

3. 现代加密套件:禁用SSLv3、TLSv1.0、TLSv1.1,启用TLSv1.2和TLSv1.3

4. HSTS头:max-age至少31536000(1年)

5. 无混合内容:所有资源通过HTTPS加载

6. OCSP Stapling:启用OCSP装订,提升握手速度

参考配置:Nginx完整HTTPS

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /path/to/fullchain.crt;
    ssl_certificate_key /path/to/private.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_stapling on;
    ssl_stapling_verify on;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;

    # 其他配置...
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

结语

加HTTPS不是装个证书就完事,配置细节决定安全性。用SSL Labs检测一下你的站,目标A+评级才算是合格的HTTPS。

本文到此结束