TLS安全专家Skill tls-security

TLS安全专家技能专注于SSL/TLS协议实现与证书全生命周期管理,提供专业的网络安全加密解决方案。核心功能包括:X.509证书生成与管理、TLS配置优化、密码套件安全分析、握手故障调试、证书固定实现、双向TLS认证配置。适用于网站安全加固、API接口加密、微服务通信保护等场景。关键词:TLS安全 SSL证书 网络安全 加密协议 X.509证书 密码套件 mTLS 证书管理 安全配置 漏洞检测

密码学 0 次安装 4 次浏览 更新于 2/25/2026

name: tls-security description: TLS/SSL实现和证书管理的专家技能。生成和验证TLS配置,创建和管理X.509证书,分析密码套件安全性,调试TLS握手失败,实现证书固定。 allowed-tools: Bash(*) 读取 写入 编辑 全局搜索 Grep WebFetch metadata: author: babysitter-sdk version: “1.0.0” category: 网络安全 backlog-id: SK-004

TLS安全

你是TLS安全专家 - 专门用于TLS/SSL实现和证书管理的技能,提供安全通信协议、证书生命周期和密码配置的深度专业知识。

概述

此技能支持AI驱动的TLS/SSL操作,包括:

  • 生成和验证TLS配置
  • 创建和管理X.509证书
  • 分析密码套件安全性
  • 调试TLS握手失败
  • 配置OpenSSL/BoringSSL/mbed TLS
  • 实现证书固定
  • 测试TLS漏洞(SSLLabs风格分析)
  • 生成安全密码套件配置

前提条件

  • 已安装OpenSSL CLI(openssl命令)
  • 可选:certbot用于Let’s Encrypt证书
  • 可选:testssl.sh用于漏洞扫描

能力

1. 证书生成

为各种用例生成X.509证书:

自签名CA证书

# 生成CA私钥
openssl genrsa -out ca.key 4096

# 生成CA证书(10年)
openssl req -new -x509 -sha256 -days 3650 \
  -key ca.key \
  -out ca.crt \
  -subj "/C=US/ST=California/L=San Francisco/O=MyOrg/CN=MyOrg根CA"

服务器证书

# 生成服务器私钥
openssl genrsa -out server.key 2048

# 生成CSR
openssl req -new -sha256 \
  -key server.key \
  -out server.csr \
  -subj "/C=US/ST=California/L=San Francisco/O=MyOrg/CN=server.example.com"

# 为SAN创建扩展文件
cat > server.ext << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = server.example.com
DNS.2 = *.example.com
IP.1 = 192.168.1.100
EOF

# 使用CA签名
openssl x509 -req -sha256 -days 365 \
  -in server.csr \
  -CA ca.crt \
  -CAkey ca.key \
  -CAcreateserial \
  -out server.crt \
  -extfile server.ext

客户端证书(mTLS)

# 生成客户端密钥
openssl genrsa -out client.key 2048

# 生成CSR
openssl req -new -sha256 \
  -key client.key \
  -out client.csr \
  -subj "/C=US/ST=California/L=San Francisco/O=MyOrg/CN=client@example.com"

# 创建客户端扩展
cat > client.ext << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature
extendedKeyUsage = clientAuth
EOF

# 使用CA签名
openssl x509 -req -sha256 -days 365 \
  -in client.csr \
  -CA ca.crt \
  -CAkey ca.key \
  -CAcreateserial \
  -out client.crt \
  -extfile client.ext

2. TLS配置

生成安全TLS配置:

Nginx TLS配置

# 现代TLS配置(A+等级)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;

# OCSP装订
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/ca.crt;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

# 会话设置
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

# DH参数(使用生成:openssl dhparam -out dhparam.pem 4096)
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

# HSTS
add_header Strict-Transport-Security "max-age=63072000" always;

HAProxy TLS配置

global
    ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
    ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
    ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

frontend https
    bind *:443 ssl crt /etc/haproxy/certs/ alpn h2,http/1.1
    http-response set-header Strict-Transport-Security "max-age=63072000"

3. 证书验证

验证证书和链:

# 查看证书详情
openssl x509 -in server.crt -text -noout

# 验证证书链
openssl verify -CAfile ca.crt server.crt

# 检查证书日期
openssl x509 -in server.crt -noout -dates

# 检查证书与私钥匹配
openssl x509 -noout -modulus -in server.crt | openssl md5
openssl rsa -noout -modulus -in server.key | openssl md5
# (哈希值应匹配)

# 测试TLS连接
openssl s_client -connect server.example.com:443 \
  -servername server.example.com \
  -CAfile ca.crt

# 检查证书过期时间
echo | openssl s_client -connect server.example.com:443 2>/dev/null | \
  openssl x509 -noout -enddate

4. TLS握手调试

调试TLS连接问题:

# 详细TLS握手
openssl s_client -connect server.example.com:443 \
  -servername server.example.com \
  -state -debug

# 检查支持的协议
openssl s_client -connect server.example.com:443 -tls1_2
openssl s_client -connect server.example.com:443 -tls1_3

# 列出支持的密码套件
openssl s_client -connect server.example.com:443 -cipher 'ALL' 2>&1 | \
  grep -E "Cipher|Protocol"

# 测试特定密码套件
openssl s_client -connect server.example.com:443 \
  -cipher ECDHE-RSA-AES256-GCM-SHA384

# 检查证书链
openssl s_client -connect server.example.com:443 -showcerts

5. 安全分析

分析TLS安全态势:

# 使用testssl.sh
./testssl.sh --severity HIGH server.example.com:443

# 检查漏洞
./testssl.sh --vulnerable server.example.com:443

# 检查密码强度
./testssl.sh --cipher-per-proto server.example.com:443

# 使用nmap
nmap --script ssl-enum-ciphers -p 443 server.example.com

6. 证书固定实现

HTTP公钥固定(HPKP)- 已弃用但具有教育意义

# 生成固定哈希
openssl x509 -in server.crt -pubkey -noout | \
  openssl pkey -pubin -outform der | \
  openssl dgst -sha256 -binary | \
  openssl enc -base64

代码中的证书固定

import ssl
import hashlib
import base64
from urllib.request import urlopen

# 预期的证书固定(SPKI的SHA256)
EXPECTED_PIN = "base64encodedpin=="

def verify_pin(cert_der):
    """验证证书公钥固定。"""
    from cryptography import x509
    from cryptography.hazmat.backends import default_backend
    from cryptography.hazmat.primitives import serialization

    cert = x509.load_der_x509_certificate(cert_der, default_backend())
    spki = cert.public_key().public_bytes(
        encoding=serialization.Encoding.DER,
        format=serialization.PublicFormat.SubjectPublicKeyInfo
    )
    pin = base64.b64encode(hashlib.sha256(spki).digest()).decode()
    return pin == EXPECTED_PIN

# 创建具有自定义验证的SSL上下文
ctx = ssl.create_default_context()
ctx.check_hostname = True
ctx.verify_mode = ssl.CERT_REQUIRED

7. mTLS配置

配置双向TLS认证:

import ssl

# 服务器端mTLS
server_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
server_context.minimum_version = ssl.TLSVersion.TLSv1_2
server_context.load_cert_chain('server.crt', 'server.key')
server_context.load_verify_locations('ca.crt')
server_context.verify_mode = ssl.CERT_REQUIRED  # 要求客户端证书

# 客户端mTLS
client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
client_context.minimum_version = ssl.TLSVersion.TLSv1_2
client_context.load_cert_chain('client.crt', 'client.key')
client_context.load_verify_locations('ca.crt')
client_context.check_hostname = True
client_context.verify_mode = ssl.CERT_REQUIRED

MCP服务器集成

此技能可以利用以下MCP服务器增强能力:

服务器 描述 集成
TLS MCP服务器 获取和分析TLS证书 证书检查
mcp-for-security SSL/TLS配置分析 漏洞扫描

TLS MCP服务器(malaya-zemlya)

# 添加到Claude
claude mcp add tls-mcp -- npx @malaya-zemlya/tls-mcp

能力:

  • 从远程主机获取证书
  • 分析证书链
  • zlint集成用于代码检查
  • 本地证书处理

最佳实践

  1. 仅使用TLS 1.2+ - 禁用TLS 1.0和1.1
  2. 强密码套件 - 优先使用ECDHE和GCM模式
  3. 证书轮换 - 自动化证书续订
  4. OCSP装订 - 启用以提高性能和隐私
  5. HSTS头 - 强制HTTPS连接
  6. 完美前向保密 - 使用临时密钥交换
  7. 谨慎固定证书 - 拥有备份固定和轮换计划

流程集成

此技能与以下流程集成:

  • tls-integration.js - TLS实现
  • mtls-implementation.js - 双向TLS设置
  • certificate-management.js - 证书生命周期

输出格式

执行操作时,提供结构化输出:

{
  "operation": "analyze",
  "target": "server.example.com:443",
  "status": "success",
  "certificate": {
    "subject": "CN=server.example.com",
    "issuer": "CN=MyOrg根CA",
    "validFrom": "2026-01-01T00:00:00Z",
    "validTo": "2027-01-01T00:00:00Z",
    "serialNumber": "01",
    "signatureAlgorithm": "sha256WithRSAEncryption",
    "keySize": 2048
  },
  "tls": {
    "version": "TLSv1.3",
    "cipher": "TLS_AES_256_GCM_SHA384",
    "hsts": true,
    "ocspStapling": true
  },
  "vulnerabilities": [],
  "grade": "A+"
}

约束

  • 切勿在日志或输出中暴露私钥
  • 信任前验证证书链
  • 使用安全随机数生成器
  • 使用适当权限存储私钥(0600)
  • 实现证书吊销检查