【问答】HTTPS常见问题15问:从原理到部署


阿里云特惠 - 新用户专享

HTTPS常见问题15问

HTTPS已成为网站标配,但很多开发者对其原理和配置仍有疑问.本文整理15个高频问题.

Q1: HTTPS和HTTP有什么区别?

A: HTTPS = HTTP + TLS/SSL,主要区别:

  • 加密:HTTPS传输加密,HTTP明文传输
  • 身份验证:HTTPS需要数字证书验证服务器身份
  • 完整性:HTTPS防止数据被篡改
  • 端口:HTTP默认80,HTTPS默认443

Q2: TLS握手过程是怎样的?

A: 以TLS 1.2为例(简化):

客户端                                    服务器
   |                                        |
   |-------- ClientHello (支持的加密套件) ---->|
   |                                        |
   |<------- ServerHello (选择的加密套件) ----|
   |<------- Certificate (服务器证书) --------|
   |<------- ServerHelloDone ----------------|
   |                                        |
   |-------- ClientKeyExchange (预主密钥) --->|
   |-------- ChangeCipherSpec -------------->|
   |-------- Finished (加密握手消息) --------->|
   |                                        |
   |<------- ChangeCipherSpec ---------------|
   |<------- Finished (加密握手消息) ---------|
   |                                        |
   |======== 加密数据传输 ===================|

Q3: 什么是数字证书?

A: 证书是服务器身份的"身份证",包含:

# 证书核心内容
{
    "subject": {          # 证书持有者信息
        "CN": "example.com",  # 域名
        "O": "Example Inc",   # 组织
    },
    "issuer": {           # 签发者(CA)
        "CN": "DigiCert"
    },
    "validity": {         # 有效期
        "notBefore": "2026-01-01",
        "notAfter": "2027-01-01"
    },
    "subjectPublicKeyInfo": {...},  # 服务器公钥
    "signature": {...}    # CA的数字签名
}

Q4: 如何验证证书是否有效?

A: 浏览器验证三步:

  1. 验证签名:用CA公钥验证证书签名
  2. 验证有效期:检查notBefore和notAfter
  3. 验证域名:证书CN/SAN是否匹配访问域名

Q5: 什么是HSTS?

A: HTTP Strict Transport Security,强制使用HTTPS:

# Nginx配置HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

# 含义:
# max-age=31536000 - 记住1年
# includeSubDomains - 子域名也强制HTTPS

Q6: 证书类型有哪些?

类型 验证方式 适用场景 价格
DV 域名所有权 个人站点 免费-便宜
OV 组织真实性 企业官网 中等
EV 严格组织验证 金融/电商
Wildcard 域名所有权 多子域名 中等

Q7: Let's Encrypt如何免费申请?

# 使用Certbot自动申请和续期
sudo apt install certbot

# 申请证书(自动验证域名)
sudo certbot certonly --standalone -d example.com -d www.example.com

# 证书位置
/etc/letsencrypt/live/example.com/
├── fullchain.pem  # 证书链
└── privkey.pem    # 私钥

# 自动续期(每60天)
sudo certbot renew --dry-run

更多问题速查

  • Q8: 什么是SNI? → 多域名共享IP的技术
  • Q9: TLS 1.3有什么改进? → 握手更快,更安全
  • Q10: 什么是前向保密? → 即使私钥泄露,历史会话也不受影响
  • Q11: 证书过期怎么办? → 提前30天续期,设置监控告警
  • Q12: 什么是OCSP Stapling? → 服务器预先获取证书状态,加速握手

总结

HTTPS配置不难,关键是理解原理.建议使用Let's Encrypt免费证书,配合自动化续期,既安全又省心.

发表评论