15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
23.10.2024

HTTPS 协议是什么以及它是如何工作的

HTTPS(超文本传输安全协议)是HTTP的加密版本,将标准网络传输协议与TLS(传输层安全协议)相结合,在客户端浏览器与Web服务器之间建立经过身份验证的加密通道。通过HTTPS传输的每个字节数据都受到加密保护,这意味着无论是被动窃听者还是主动的中间人攻击者,都无法在传输过程中读取或悄然篡改数据内容。

实际上:当浏览器连接到https://example.com时,首先完成TLS握手,通过签名证书验证服务器身份,协商密码套件,并派生对称会话密钥——所有这些都在交换任何应用数据之前完成。只有握手成功后,HTTP请求才会在完全加密的情况下通过网络传输。

HTTP与HTTPS:直接对比

特性HTTPHTTPS
协议层应用层(TCP/IP)基于TLS的应用层
默认端口80443
数据加密AES-256-GCM或ChaCha20-Poly1305(TLS 1.3)
服务器身份验证由受信任CA签名的X.509证书
数据完整性HMAC / AEAD密码保证
SEO排名信号中性(受惩罚)正面排名因素
浏览器指示“不安全”警告锁形图标
性能(HTTP/2、HTTP/3)支持有限完全支持(需要TLS)
HSTS支持
MITM攻击风险正确配置后可忽略不计

深入了解TLS握手

理解握手过程是诊断证书错误、调优服务器性能和强化安全配置的基础。TLS 1.2与TLS 1.3之间的过程略有不同——这种差异在实际操作中至关重要。

TLS 1.2握手(旧版)

  1. ClientHello — 浏览器发送支持的密码套件、TLS版本和随机数(client_random)。
  2. ServerHello — 服务器选择密码套件并发送自己的随机数(server_random)。
  3. Certificate — 服务器传输其X.509证书链,供浏览器对照其受信任的CA存储进行验证。
  4. ServerKeyExchange — 对于临时Diffie-Hellman(ECDHE),服务器发送用其私钥签名的DH参数。
  5. ClientKeyExchange — 浏览器生成预主密钥,用服务器公钥(RSA)加密,或计算共享DH密钥(ECDHE),然后发送。
  6. ChangeCipherSpec / Finished — 双方从client_randomserver_random和预主密钥派生会话密钥,然后通过Finished消息确认。

数据传输前的总往返次数:2 RTT

TLS 1.3握手(当前标准)

TLS 1.3在RFC 8446中标准化,消除了多种旧版机制并显著降低了延迟:

  1. ClientHello — 浏览器立即包含其密钥共享(ECDHE公共值),以及支持的密码套件。不允许RSA密钥交换。
  2. ServerHello + EncryptedExtensions + Certificate + CertificateVerify + Finished — 服务器在单次传输中响应,已使用派生的握手密钥对扩展和证书进行加密。
  3. Client Finished — 浏览器验证服务器证书并发送Finished消息。之后应用数据可立即传输。

数据传输前的总往返次数:1 RTT。通过0-RTT恢复(会话票据),回访用户可以在第一个数据包中发送数据——但这引入了重放攻击的考量,需要谨慎处理服务器端逻辑。

TLS 1.3相对于1.2的主要改进:

  • 移除RSA密钥交换(消除前向保密风险)
  • 移除MD5、SHA-1、RC4、DES、3DES
  • 通过ECDHE强制实现前向保密
  • 加密证书传输(减少元数据泄露)
  • 更快的握手在高延迟连接上可显著减少页面加载时间

证书类型及其实际保护范围

并非所有SSL/TLS证书都是等效的。选择错误的类型是常见的操作失误。

域名验证(DV)

由自动化系统(如Let’s Encrypt)在数分钟内签发。证明证书持有者控制该域名的DNS或Web服务器。提供完整加密,但对域名背后的组织零身份验证。适用于博客、个人项目和内部工具。

组织验证(OV)

CA手动验证组织的合法存在。证书中嵌入公司名称。适用于品牌信任至关重要的企业网站和SaaS平台。

扩展验证(EV)

最严格的审核流程。历史上在浏览器中显示带有公司名称的绿色地址栏;现代浏览器已减少这种视觉区分,但EV证书仍在证书本身中嵌入经过验证的法律实体信息。适用于金融机构和高价值电子商务。

通配符证书

单个证书涵盖一个域名及其所有一级子域名(*.example.com)。重要注意事项:通配符涵盖二级子域名(*.sub.example.com需要单独的通配符)。通配符私钥泄露会同时暴露所有子域名——影响范围极大。

多域名(SAN)证书

主题备用名称(SAN)允许单个证书涵盖多个不同域名(example.comexample.netshop.example.org)。非常适合从单台服务器管理多个站点的托管环境。

为什么HTTPS在2025年不可或缺

敏感数据加密

没有TLS,用户与服务器之间的每个数据包都要经过潜在的恶意网络基础设施——公共Wi-Fi接入点、ISP透明代理和BGP劫持路由。凭据、会话令牌、支付数据和表单提交均为明文,使用Wireshark等工具可轻易截获。HTTPS完全消除了这一攻击面。

经过身份验证的服务器身份

证书信任链可防止DNS欺骗和ARP投毒攻击将用户悄然重定向到欺诈服务器。当浏览器验证证书时,它确认三件事:证书由其受信任存储中的CA签名、域名与证书的CN或SAN字段匹配,以及证书未过期或未被吊销(通过OCSP或CRL检查)。

通过AEAD密码保证数据完整性

现代TLS密码套件使用带关联数据的认证加密(AEAD)——具体为AES-256-GCM或ChaCha20-Poly1305。这些在单次操作中同时提供机密性和完整性。传输过程中任何位翻转或注入尝试都会导致MAC验证失败,连接立即终止。这可防止ISP或恶意中间人在HTTP响应中注入广告、跟踪脚本或恶意软件的内容注入攻击。

SEO与排名信号

Google于2014年确认HTTPS为排名信号,并逐步提高其权重。除直接排名因素外,Chrome在HTTP页面上显示的”不安全”警告会显著提高跳出率——这是一个间接抑制排名的行为信号。HTTP/2和HTTP/3(QUIC)能带来显著的性能提升,在所有主流浏览器实现中均需要TLS。页面速度越快排名越好;HTTPS是前提条件。

HSTS与预加载

HTTP严格传输安全(Strict-Transport-Security头部)指示浏览器在指定的max-age期间内拒绝对某域名的所有HTTP连接,甚至在重定向发生之前。将您的域名提交到HSTS预加载列表会将此行为硬编码到浏览器二进制文件中,完全消除首次访问的漏洞窗口。

实施HTTPS:生产级操作指南

第一步:获取SSL/TLS证书

Let’s Encrypt(免费、自动化)是大多数部署的标准选择。Certbot是参考ACME客户端:

sudo apt update && sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com

对于Apache:

sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d example.com -d www.example.com

Certbot会自动修改您的虚拟主机配置,并设置用于续期的cron任务或systemd定时器。Let’s Encrypt证书90天后过期;默认情况下,自动续期每60天运行一次。

若要在不做任何更改的情况下测试续期:

sudo certbot renew --dry-run

对于需要OV或EV证书的生产环境,请从商业CA(DigiCert、Sectigo、GlobalSign)购买,并按照其手动签发流程操作。AlexHost的SSL证书页面涵盖了包括DV和商业证书在内的可用选项。

第二步:在Web服务器上安装和配置证书

Nginx示例/etc/nginx/sites-available/example.com):

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

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

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;

    root /var/www/example.com;
    index index.php index.html;
}

Apache示例/etc/apache2/sites-available/example.com-ssl.conf):

<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

    SSLProtocol -all +TLSv1.2 +TLSv1.3
    SSLCipherSuite HIGH:!aNULL:!MD5
    SSLHonorCipherOrder off

    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
</VirtualHost>

第三步:通过永久301重定向强制使用HTTPS

Nginx — 添加单独的server块:

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

Apache — 在.htaccess或HTTP虚拟主机中:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

使用301(永久)而非302(临时)。302不传递链接权重,也不更新浏览器缓存,这意味着用户在每次新会话中仍会访问HTTP。

第四步:解决混合内容问题

当HTTPS页面通过HTTP加载子资源(图片、脚本、样式表、iframe)时,就会出现混合内容。浏览器会阻止或警告混合内容,破坏页面功能并消除HTTPS的安全保证。

检测方法:打开Chrome开发者工具(F12),进入控制台标签,查找Mixed Content警告。或者使用SSL Labs混合内容检查器或why-no-padlock.com工具。

解决策略:

  • 使用搜索替换工具(如WordPress的wp-cli search-replace 'http://example.com' 'https://example.com')更新CMS数据库中硬编码的http:// URL
  • 在修复来源的同时,设置Content-Security-Policy: upgrade-insecure-requests头部作为临时缓解措施
  • 审查第三方嵌入——如果供应商不支持HTTPS,请替换或移除该嵌入

第五步:验证您的配置

# Test certificate chain and expiry
openssl s_client -connect example.com:443 -servername example.com < /dev/null

# Check TLS protocol versions and cipher suites
nmap --script ssl-enum-ciphers -p 443 example.com

如需全面的外部审计,请将您的域名提交至SSL Labs服务器测试。获得A+评级需要:

  • 仅支持TLS 1.2和1.3(禁用TLS 1.0和1.1)
  • 无弱密码套件(RC4、3DES、导出密码)
  • HSTS头部的max-age >= 180天
  • 无证书链问题(包含中间证书)
  • 启用OCSP装订

常见陷阱与边缘情况

证书链不完整是最常见的生产问题。如果您只安装了叶证书而没有中间CA证书,大多数桌面浏览器仍会解析证书链(它们会缓存中间证书),但移动浏览器、API客户端和curl会因SSL_ERROR_RX_RECORD_TOO_LONGunable to get local issuer certificate而失败。请始终使用fullchain.pem(Let’s Encrypt)或将叶证书与其他CA的中间证书拼接。

OCSP装订通过让服务器缓存并提供OCSP响应,而非要求浏览器联系CA的OCSP响应器,从而降低握手延迟并提高隐私性。没有装订,每次TLS握手都会触发第三方HTTP请求,在冷连接上增加50–200ms的延迟。在Nginx中使用ssl_stapling on; ssl_stapling_verify on;启用它。

私钥安全经常被忽视。私钥文件应由root拥有,仅对Web服务器进程可读,并以chmod 600权限存储。切勿将私钥提交到版本控制系统。在共享基础设施上,使用硬件安全模块(HSM)或密钥管理系统(HashiCorp Vault、AWS Secrets Manager)进行密钥存储。

通配符证书吊销影响范围极大。如果通配符私钥泄露并且证书被吊销,所有子域名将同时失去HTTPS。对于高安全性环境,建议通过ACME DNS-01挑战自动化为每个子域名单独颁发证书。

负载均衡器处的TLS终止是一种常见架构,其中TLS在边缘(负载均衡器、CDN、反向代理)解密,流量在内部以未加密方式传输。仅当内部网络完全受信任且隔离时,这才是可接受的。对于受监管的环境(PCI-DSS、HIPAA),需要端到端加密——在负载均衡器和后端服务器之间重新加密流量。

AlexHost基础设施上的HTTPS

VPS托管环境中,您拥有完整的root访问权限,可以安装Certbot、直接配置Nginx或Apache,并实施上述强化TLS设置。这是需要自定义密码套件、HSTS预加载和OCSP装订的生产工作负载的推荐路径。

对于共享虚拟主机用户,Let’s Encrypt证书通常可通过控制面板一键安装,无需SSH访问即可自动处理证书签发和续期。

如果您管理多个域名或运营经销商业务,带cPanel的VPS提供图形界面,可管理所有托管域名的SSL,包括用于自动Let’s Encrypt配置的AutoSSL。

对于处理支付数据的电子商务部署,将HTTPS与来自SSL证书的商业OV或EV证书配合使用,可提供DV证书无法提供的组织身份验证——这与PCI-DSS合规审计相关。

如果您的基础设施包含事务性或营销电子邮件,请注意HTTPS和SMTP/IMAP TLS是独立的事项。保护您的Web存在并不会自动保护您的邮件基础设施;这需要在您的电子邮件托管堆栈上进行单独的TLS配置。

决策矩阵与技术检查清单

在标记HTTPS迁移完成之前,请使用此检查清单:

证书

  • [ ] 证书由受信任的CA签发(使用openssl verify验证)
  • [ ] 已安装完整证书链(叶证书+中间证书)
  • [ ] 证书涵盖所有服务的域名/子域名(检查SAN)
  • [ ] 已配置到期监控(在30天和7天时发出警报)
  • [ ] 已使用--dry-run测试自动续期

服务器配置

  • [ ] 明确禁用TLS 1.0和1.1
  • [ ] 已启用TLS 1.3
  • [ ] 已移除弱密码套件(RC4、3DES、NULL、EXPORT)
  • [ ] 已启用并验证OCSP装订
  • [ ] ssl_session_tickets off(防止会话票据密钥轮换问题)

应用层

  • [ ] 所有内部链接使用相对URL或https://
  • [ ] 浏览器控制台中无混合内容警告
  • [ ] 已设置Content-Security-Policy: upgrade-insecure-requests头部
  • [ ] 所有主机名上均有从HTTP到HTTPS的301重定向

安全头部

  • [ ] Strict-Transport-Security头部的max-age >= 31536000
  • [ ] 已添加includeSubDomains指令(在验证所有子域名支持HTTPS之后)
  • [ ] 域名已提交至HSTS预加载列表(可选但推荐)

验证

  • [ ] SSL Labs服务器测试返回A或A+
  • [ ] openssl s_client确认正确的证书链
  • [ ] 已确认续期cron/systemd定时器处于活动状态

常见问题

HTTPS能防御所有类型的网络攻击吗?

不能。HTTPS加密传输层并验证服务器身份,但它不能防御应用层漏洞(SQL注入、XSS、CSRF)、被攻破的服务器端代码,或针对已认证用户设备的攻击。钓鱼网站可以获得有效的DV证书并显示锁形图标——HTTPS确认连接已加密,而非该网站值得信任。

启用HTTPS对性能有何影响?

在TLS 1.3和HTTP/2的配合下,现代硬件上的开销可以忽略不计。TLS握手在首次连接时增加一次额外的往返(使用会话票据或0-RTT恢复时为零)。自2010年以来几乎所有服务器CPU都具备的AES-NI硬件加速,可以以线速处理对称加密。实际上,HTTPS网站通常比HTTP网站加载更快,因为HTTP/2多路复用和头部压缩——在浏览器中需要TLS——的收益超过了握手成本。

SSL/TLS证书过期会发生什么?

浏览器会立即显示全页警告,阻止访问该网站。API客户端和移动应用通常会以硬错误而非警告的形式失败。搜索引擎爬虫可能仍会索引该网站,但会标记证书错误。通过Certbot或ACME自动续期可防止过期;关键的操作要求是确保续期cron任务或systemd定时器正在运行,并且已配置续期警报。

TLS与SSL有什么区别?

SSL(安全套接字层)是前身协议,其2.0和3.0版本均已被弃用,并因严重漏洞(POODLE、DROWN)被RFC 7568禁止。TLS(传输层安全协议)是其继任者,TLS 1.2(RFC 5246)和TLS 1.3(RFC 8446)是目前唯一被认为安全的版本。”SSL证书”这一术语在口语中仍然存在,但任何现代服务器上实际使用的协议都是TLS。将服务器配置为允许SSLv3是一种错误配置,而非兼容性特性。

我可以在我不拥有的域名上使用HTTPS吗?

不可以。证书颁发机构在签发前会验证域名控制权。ACME协议(由Let’s Encrypt使用)要求您在已知的HTTP路径放置特定文件(HTTP-01挑战)或创建特定的DNS TXT记录(DNS-01挑战)来证明控制权。如果无法通过这些挑战之一,将不会为您不控制的域名签发任何证书。

15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用