0Pricing
Cloud & IT Cert Prep · 课时

PKI 使用场景:HTTPS、S/MIME 与代码签名

将 PKI 概念应用于实际场景:保护 Web 流量、使用 S/MIME 加密电子邮件,以及通过代码签名证书验证软件完整性。

PKI 使用场景:HTTPS、S/MIME 与代码签名 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。

PKI 在实际应用中的场景

公钥基础设施(PKI)是安全数字通信中无形的基础。您所学习的证书和 CA 每天都应用于数十种实际场景。Security+ 考试会考查您识别 PKI 应用场景、理解每种场景适用的证书类型,以及判断 PKI 在各个场景中提供何种保护的能力。考试中最重要的三个应用场景是HTTPS/TLS(网站安全)、S/MIME(电子邮件安全)和代码签名(软件完整性)。

HTTPS:用于网站安全的 PKI

HTTPS(基于 TLS 的 HTTP)是最常见的 PKI 应用场景。当您连接到 https://bank.com 时,浏览器会执行以下操作:(1) 接收服务器的 TLS 证书;(2) 验证证书链是否指向受信任的根 CA;(3) 将主机名与 SAN 字段进行比对;(4) 验证证书是否未被吊销;(5) 使用公钥进行 Diffie-Hellman 密钥交换,以建立加密会话。浏览器中的挂锁图标表示这些检查全部通过。证书缺失或无效时,浏览器会发出警告,阻止大多数用户继续访问。

# Check HTTPS certificate details
curl -v https://example.com 2>&1 | grep -A 10 'SSL certificate'

# Test TLS configuration quality
openssl s_client -connect example.com:443 -tls1_3 2>/dev/null | \
  grep -E 'Protocol|Cipher|Verify'
# Protocol: TLSv1.3
# Cipher: TLS_AES_256_GCM_SHA384
# Verify return code: 0 (ok)

S/MIME:用于电子邮件安全的 PKI

S/MIME(安全/多用途互联网邮件扩展)使用 PKI 证书为电子邮件提供两项安全服务。加密:发件人使用收件人的公钥加密邮件正文,因此只有收件人能够解密,即使邮件在传输过程中被拦截,或存储在已遭入侵的服务器上,也能保护机密性。数字签名:发件人使用自己的私钥进行签名,向收件人证明邮件确实来自该发件人且未被篡改,从而保护完整性并提供不可否认性。S/MIME 要求每位用户拥有一张由 CA 签发的专属证书。

# S/MIME email signing and encryption with OpenSSL
# Sign an email
openssl smime -sign -in email_body.txt -signer alice_cert.pem \
  -inkey alice_private.key -out signed_email.eml -outform PEM

# Encrypt an email (using Bob's public key/certificate)
openssl smime -encrypt -aes256 -in email_body.txt \
  -out encrypted_email.eml bob_cert.pem

# Bob decrypts with his private key
openssl smime -decrypt -in encrypted_email.eml \
  -recip bob_cert.pem -inkey bob_private.key

代码签名:用于软件完整性的 PKI

代码签名使用 PKI 对软件(包括可执行文件、脚本、驱动程序和安装程序)进行数字签名,使用户能够验证软件来自受信任的发布者且未被篡改。软件供应商使用由受信任 CA 签发的代码签名证书所对应的私钥为代码签名。用户运行软件时,OS 会使用证书链中供应商的公钥验证签名。Windows SmartScreen、macOS Gatekeeper 以及 iOS/Android 应用商店都依靠代码签名来确认软件来源。未签名的软件可能会被阻止,或触发安全警告。

# Verify code signing on Windows (PowerShell)
Get-AuthenticodeSignature -FilePath 'C:\Software\installer.exe' | Format-List
# Status: Valid
# SignerCertificate: [certificate details]
# TimeStamperCertificate: [timestamp CA details]

# On Linux/macOS, verify GPG signature of downloaded software
gpg --verify hashicorp_public.gpg terraform.zip.sig terraform.zip
# Good signature from 'HashiCorp Security (hashicorp.com/security)'

客户端证书身份验证

客户端证书身份验证(也称为双向 TLS 或 mTLS)扩展了标准 TLS 模型,要求客户端也提供证书。在标准 TLS 中,只有服务器通过证书进行身份验证;而在 mTLS 中,通信双方会相互验证身份。其应用场景包括:VPN 身份验证(使用智能卡或客户端证书代替密码)、API 身份验证(机器到机器的身份验证,此时客户端是服务而不是人)以及特权管理员访问(要求管理员使用内置证书的硬件令牌)。

# nginx configuration for mutual TLS (client certificate required)
# server {
#   listen 443 ssl;
#   ssl_certificate /path/to/server_cert.pem;
#   ssl_certificate_key /path/to/server_key.pem;
#   ssl_client_certificate /path/to/ca_cert.pem;
#   ssl_verify_client on;
#   ssl_verify_depth 2;
# }

# Test with a client certificate
curl --cert client_cert.pem --key client_key.pem https://api.example.com/

SSH 主机密钥验证

SSH 使用公钥密码学实现两种目的:服务器身份验证和客户端身份验证。服务器身份验证:您首次连接 SSH 服务器时,服务器会提供其主机密钥(公钥)。您的 SSH 客户端会将其存储在 ~/.ssh/known_hosts 中。在后续连接中,如果主机密钥发生变化(这可能表示发生了 MITM 攻击或服务器被重建),SSH 会向您发出警告。客户端身份验证:管理员不使用密码,而是使用密钥对——将公钥添加到服务器的 authorized_keys 中,并通过从不发送的私钥证明身份。SSH 主机密钥与 PKI 证书不同,但发挥着相同的信任作用。

# First-time SSH connection stores server host key
ssh user@server.example.com
# The authenticity of host 'server.example.com' can't be established.
# ED25519 key fingerprint is SHA256:abc123...
# Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

# Host key stored in: ~/.ssh/known_hosts
cat ~/.ssh/known_hosts | grep server.example.com

# If host key changes: 
# WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

文档签名与时间戳

PKI 可在许多司法管辖区支持具有法律约束力的数字文档签名。Adobe PDF 签名、DocuSign 和政府电子签名系统都使用 PKI 证书为文档签名。文档签名的一个关键补充是时间戳:受信任的时间戳机构(TSA)使用可信时间为文档的哈希值进行反签名,证明文档在特定时间点已经存在。时间戳对代码签名同样至关重要——没有时间戳时,即使软件是在签名证书过期前发布的,代码签名也会在证书过期后失效。

物联网设备证书

随着物联网设备大量增加,PKI 提供了一种大规模验证设备身份的机制。每台设备在制造过程中都会配置一张唯一证书(这一过程称为设备身份配置),使服务器能够根据设备证书验证各台设备的身份。这可以支持多种场景,例如智能电表向公用事业服务器证明身份、医疗设备向医院网络进行身份验证,或一组车辆向制造商后端进行身份验证。物联网 PKI 必须在资源受限的条件下管理数百万台设备,因此推动了 ECC 证书的采用,因为这类证书体积小且验证速度快。

使用证书进行 VPN 身份验证

基于证书的 VPN 身份验证比基于密码的 VPN 身份验证安全得多。组织内部 CA 会为每位 VPN 用户或每台 VPN 设备签发客户端证书。连接时,VPN 网关会验证客户端证书,确保该证书由受信任的内部 CA 签发、仍在有效期内,并且未通过 CRL/OCSP 被吊销。员工离职时,立即吊销其证书即可阻止 VPN 访问,比寄希望于员工没有将密码分享给他人更加可靠。

# OpenVPN client certificate configuration
# client
# remote vpn.example.com 1194
# proto udp
# ca ca.crt        <- CA certificate (trust anchor)
# cert client.crt  <- Client's certificate
# key client.key   <- Client's private key
# tls-auth ta.key 1
# cipher AES-256-GCM

# The VPN server verifies the client cert chain against ca.crt
# Revoked certs listed in CRL won't be accepted

常见的证书相关错误

安全专业人员必须能够诊断常见的证书错误。证书已过期:notAfter 日期已过,需要续订证书。主机名不匹配:证书的 SAN 与请求的主机名不匹配,需要验证 CN 和 SAN,可能还需要通配符证书或多 SAN 证书。自签名证书:没有 CA 为该证书背书,需要将其添加到本地信任存储,或替换为 CA 签发的证书。证书链不完整:服务器未提供中间 CA 证书,需要配置服务器发送完整证书链。证书已吊销:CRL 或 OCSP 显示证书已被吊销,需要立即响应密钥泄露事件。

# Diagnose certificate errors with openssl
openssl s_client -connect server.example.com:443 2>&1
# Common error messages:
# depth=0 ... error 10 at 0 depth lookup: certificate has expired
# depth=0 ... error 18: self-signed certificate
# depth=0 ... error 20: unable to get local issuer certificate (broken chain)
# depth=0 ... error 23: certificate revoked
# Verify return code: 0 (ok) = success

通配符证书与 SAN 证书

有两种证书类型可以处理多个主机名。通配符证书涵盖域名下所有一级子域名:*.example.com 可以涵盖 www.example.com、mail.example.com 和 api.example.com,但不能涵盖 sub.api.example.com(两级子域名)。所有服务共用一张证书和一个私钥,使用方便,但如果私钥泄露,所有服务都会受到影响,因此存在风险。多 SAN 证书则会在 SAN 扩展中明确列出多个特定域名(例如 example.com、www.example.com 和 api.example.com)。这种方式粒度更细,但添加新域名时需要更新证书。

快速检查

测试您对本课 CompTIA Security+(SY0-701)概念的理解。

课程回顾

本课您学习了:HTTPS/TLS使用服务器证书加密网站流量并验证服务器身份;S/MIME证书支持电子邮件签名和加密;代码签名证书证明软件完整性和发布者身份;客户端证书支持 VPN 和 API 的双向身份验证。接下来,我们将学习密码策略与多因素身份验证。

常见问题解答

「PKI 使用场景:HTTPS、S/MIME 与代码签名」课时是免费的吗?

是的 — 「PKI 使用场景:HTTPS、S/MIME 与代码签名」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。

「PKI 使用场景:HTTPS、S/MIME 与代码签名」这节课中我会学到什么?

将 PKI 概念应用于实际场景:保护 Web 流量、使用 S/MIME 加密电子邮件,以及通过代码签名证书验证软件完整性。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cloud & IT Cert Prep 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「PKI 使用场景:HTTPS、S/MIME 与代码签名」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?

能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 证书颁发机构与信任链
  2. X.509 证书结构
  3. 证书生命周期与吊销
  4. PKI 使用场景:HTTPS、S/MIME 与代码签名
← 返回 Cloud & IT Cert Prep