国密 SSL/TLS 配置指南:SM2/SM3/SM4 在 Nginx 中的应用
介绍国密 SSL/TLS 算法(SM2/SM3/SM4),讲解在 OpenSSL 和 Nginx 中配置国密加密的实战方法。
介绍国密 SSL/TLS 算法(SM2/SM3/SM4),讲解在 OpenSSL 和 Nginx 中配置国密加密的实战方法。
openssl s_time 是 OpenSSL 官方提供的 SSL/TLS 性能基准测试工具。它通过模拟大量握手连接来测量服务器的每秒处理能力,是评估 TLS 性能的重要工具。 基本用法 1 openssl s_time -connect example.com:443 -new -time 10 参数说明: -connect host:port — 目标服务器地址(默认端口 4433) -new — 测试新建连接(完整握手) -reuse — 测试连接重用(会话恢复) -time seconds — 测试持续时间(默认 30 秒) 实际测试示例 测试 TLS 1.3 新建连接 1 2 3 4 5 6 $ openssl s_time -connect localhost:443 -new -time 3 -tls1_3 Collecting connection statistics for 3 seconds ********************************************************************************************************************************************************************************************************************************** 1243 connections in 1.85s; 671.89 connections/user sec, 0 bytes read per connection 1243 connections in 4 real seconds 测试 TLS 1....
详解 OpenSSL verify 命令的用法,包括证书链验证、CA 存储、partial_chain、trust 设置等核心参数,每个命令都经过实际验证。
深入解析 OpenSSL Engine 架构,讲解如何通过 Engine 接口集成 HSM、PKCS#11 设备、云 KMS 等外部加密服务。
在日常开发和运维工作中,我们经常需要通过多台跳板机 SSH 到内网服务器。每次都需要在每台机器上配置密钥或者输入密码,非常麻烦。SSH Agent 转发(Agent Forwarding)正是解决这一问题的利器。 什么是 SSH Agent SSH Agent 是一个后台运行的程序(守护进程),它负责管理用户的私钥。当你使用 SSH 连接服务器时,SSH Agent 会自动提供私钥进行认证,无需每次都输入密码或指定密钥文件。 核心组件 ssh-agent:后台守护进程,启动后会在环境变量中设置 SSH_AUTH_SOCK ssh-add:用于将私钥添加到 agent 管理列表 工作原理 1 2 [本地主机] ----SSH 隧道----> [跳板机] ----SSH----> [目标服务器] (持有私钥) (转发请求) (验证签名) 当启用 Agent Forwarding 后,跳板机会作为代理,将服务器的认证请求转发回本地主机,由本地的 SSH Agent 完成签名验证。 配置步骤 第一步:启动 SSH Agent 1 2 3 4 5 6 # 启动 ssh-agent $ ssh-agent -s # 输出示例: # SSH_AUTH_SOCK=/tmp/ssh-XXXX/agent.259996; export SSH_AUTH_SOCK; # SSH_AGENT_PID=260133; export SSH_AGENT_PID; 第二步:添加私钥 1 2 3 4 5 6 7 # 将私钥添加到 agent $ ssh-add ~/....
什么是 ALPN ALPN(Application-Layer Protocol Negotiation,应用层协议协商)是 TLS 协议的一个扩展,定义于 RFC 7301。它允许客户端和服务器在 TLS 握手阶段就协商好使用哪个应用层协议,而无需额外的往返通信。 如果没有 ALPN,客户端只能先建立 TLS 连接,再通过 NPN(Next Protocol Negotiation,已废弃)或在 TLS 握手完成后通过额外协商来确定使用 HTTP/1.1 还是 HTTP/2。ALPN 将这个过程整合到 TLS 握手中,减少了延迟。 ALPN 的工作原理 在 TLS ClientHello 消息中,客户端通过 application_layer_protocol_negotiation 扩展发送自己支持的协议列表,按优先级排序。服务器从中选择一个双方都支持的协议,并在 ServerHello 中回显该选择。 整个协商过程在 TLS 握手内部完成,对应用层透明: 1 2 3 4 5 6 7 8 9 10 11 12 Client Server | | |-------- ClientHello ---------->| | + ALPN: [h2, http/1.1] | | | |<------- ServerHello -----------| | + ALPN: h2 | | | |-------- 后续 TLS 握手 -------->| | | |<===== TLS 加密通道建立 ========>| | 使用 HTTP/2 通信 | 常见的 ALPN 协议标识符 协议标识符 说明 h2 HTTP/2 over TLS http/1....
OCSP(Online Certificate Status Protocol)是用于实时检查证书是否被吊销的协议。相比 CRL,OCSP 无需下载完整吊销列表,查询效率更高。本文介绍 OCSP 原理及 OpenSSL 命令行操作。 什么是 OCSP? 当浏览器验证 TLS 证书时,除了检查证书链和有效期,还需确认证书未被吊销。传统方式是下载 CRL(Certificate Revocation List),但列表会随时间增长。OCSP 允许客户端直接查询证书颁发机构,获取特定证书的实时状态。 OCSP 响应类型 状态 含义 good 证书有效,未被吊销 revoked 证书已被吊销 unknown 响应者不知道该证书 从证书提取 OCSP 信息 获取证书的 OCSP 响应者地址 1 openssl x509 -in certificate.crt -noout -ocsp_uri 输出示例: 1 http://ocsp.digicert.com 获取颁发者信息 OCSP 查询需要知道证书的颁发者(CA): 1 2 3 4 5 # 获取证书颁发者 openssl x509 -in certificate.crt -noout -issuer # 获取颁发者证书 openssl x509 -in certificate.crt -noout -issuer_hash 实际 OCSP 查询示例 使用 OpenSSL 进行 OCSP 查询 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 获取目标证书和颁发者证书 openssl s_client -connect google....
ECDSA(Elliptic Curve Digital Signature Algorithm)是基于椭圆曲线密码学的数字签名算法,广泛应用于比特币、区块链以及 TLS 证书中。本文介绍其原理及 OpenSSL 命令行操作。 什么是 ECDSA? ECDSA 是 DSA(Digital Signature Algorithm)的椭圆曲线版本,利用椭圆曲线离散对数问题的计算难度来保证签名安全性。相比传统 RSA,ECDSA 在相同安全强度下密钥更短,运算更快。 常见曲线 曲线 位数 应用场景 prime256v1 (P-256) 256 位 主流 TLS 证书、Web 应用 secp384r1 (P-384) 384 位 高安全场景、政府、金融 secp521r1 (P-521) 521 位 极高安全需求 生成 ECDSA 密钥对 生成私钥 1 2 3 openssl genpkey -algorithm EC \ -pkeyopt ec_paramgen_curve:prime256v1 \ -out ecdsa_private.pem 导出公钥 1 openssl pkey -in ecdsa_private.pem -pubout -out ecdsa_public.pem 查看密钥详情 1 openssl pkey -in ecdsa_private....
OpenSSL passwd 命令用于生成 Unix 密码哈希,支持 SHA-512、SHA-256、MD5 等算法,适用于系统管理和脚本场景。
随机数是密码学的基石。密钥、IV、盐值、Session ID 等都需要高质量的随机数。OpenSSL 的 rand 命令是生成密码学安全随机数的实用工具。 基本语法 1 openssl rand [选项] 字节数 常用选项: -hex:输出十六进制格式 -base64:输出 Base64 编码格式 -out <文件>:输出到文件 常用示例 生成十六进制随机数 1 2 # 生成 16 字节(128 位)的十六进制随机数 openssl rand -hex 16 输出示例: 1 5254ce50aaf9b31ae6c6ecf2ef75f4de 生成 Base64 随机数 1 2 # 生成 32 字节(256 位)的 Base64 随机数 openssl rand -base64 32 输出示例: 1 n8EZAZAQ4PL60cFHcP0KIeT8dlhsa8m1K8QP1dQVnlQ= 生成不同长度的随机数 1 2 3 4 5 6 7 8 9 10 # 8 字节(64 位) openssl rand -hex 8 # 输出:67194de56e50d52b # 32 字节(256 位) openssl rand -hex 32 # 输出:7be8420779779ecd1253f6be94e7d717b9a75e7aa5d0767c95414e8f811d6b29 # 64 字节(512 位) openssl rand -hex 64 实战场景 1....