
文章目录1. 国际 TLS普通 HTTPS 的主流基础1.1 TLS 1.21.2 TLS 1.32. RFC 8998TLS 1.3 里怎么用国密算法3. 中国 TLCPGB/T 38636-20204. SM2、SM3、SM4 分别负责什么4.1 SM24.2 SM34.3 SM45. TLCP、GMSSL、NTLS 名字怎么对齐6. 为什么本工程选 Tencent Kona7. 标准和实现之间的关系8. 对接时的判断题8.1 对方说“我们是国密双证书”8.2 对方说“我们是 TLS 1.3 国密套件”8.3 对方只说“SM2 证书”8.4 对方给你 .cer 文件9. 本篇小结这一篇回答一个经常让新手困惑的问题国密 SSL、TLCP、GMSSL、NTLS、TLS 1.3 国密套件、SM2 证书到底是不是一回事结论先说不是一回事。它们有关联但不能混用。1. 国际 TLS普通 HTTPS 的主流基础1.1 TLS 1.2TLS 1.2 对应 RFC 5246发布于 2008 年。它长期是互联网 HTTPS 的主力版本。TLS 1.2 的特点是密码套件名字里通常包含很多信息例如TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256这个名字大概说明用 ECDHE 做临时密钥交换用 RSA 做认证用 AES-128-GCM 做对称加密用 SHA-256 做摘要/伪随机函数相关工作。1.2 TLS 1.3TLS 1.3 对应 RFC 8446发布于 2018 年。它废弃了很多旧算法握手流程也比 TLS 1.2 更现代。TLS 1.3 的密码套件名字更短例如TLS_AES_128_GCM_SHA256为什么少了 RSA/ECDHE因为 TLS 1.3 把“密钥交换、签名算法、对称加密”拆到不同扩展里协商不再像 TLS 1.2 那样全塞在一个套件名里。2. RFC 8998TLS 1.3 里怎么用国密算法RFC 8998 讲的是在 TLS 1.3 中使用 ShangMi/SM 算法的方式包括TLS_SM4_GCM_SM3 TLS_SM4_CCM_SM3它涉及SM2签名/认证SM3杂凑SM4对称加密ECDHE over SM2 curve密钥交换相关机制。但是要特别注意RFC 8998 是TLS 1.3 profile不是 TLCP。它也不是 IETF 标准轨文档而是 informational RFC。RFC 8998 页面明确说明它不是 Internet Standards Track 规范并且 SM 算法的使用不代表 IETF 推荐。所以当对方说“国密 TLS 1.3”时你要确认是不是 RFC 8998当对方说“TLCP/GMSSL/NTLS”时就不是 RFC 8998 这条线。3. 中国 TLCPGB/T 38636-2020中国国家标准 GB/T 38636-2020《信息安全技术 传输层密码协议TLCP》 于 2020-04-28 发布2020-11-01 实施状态为现行。TLCP 可以理解为一种“TLS-like”的传输层密码协议但它不是普通 TLS 1.2也不是 TLS 1.3。Tencent Kona 的 README 里也解释过命名GB/T 38636-2020 定义的名称是Transport layer cryptography protocol在 Kona 项目里协议名叫TLCP版本是1.1历史上很多人也叫 GMSSL / GMSSL 1.1。本工程配置的是protocol:TLCPv1.1enabled-protocols:-TLCPv1.1所以本工程主线是TLCP v1.1 客户端接入不是 TLS 1.3 RFC 8998。4. SM2、SM3、SM4 分别负责什么国密 SSL/TLCP 里常见的算法是 SM2、SM3、SM4。4.1 SM2SM2 是椭圆曲线公钥密码算法系列。常见用途数字签名公钥加密密钥交换证书公钥算法。标准入口GB/T 32918.2-2016 SM2 第 2 部分数字签名算法GB/T 32918.5-2017 SM2 第 5 部分参数定义在 TLCP 里SM2 常用于服务端证书签名验证、ServerKeyExchange 签名验证以及加密预主密钥等环节。4.2 SM3SM3 是密码杂凑算法。标准入口GB/T 32905-2016 SM3 密码杂凑算法。你可以把 SM3 类比为国密体系里的 SHA-256 角色把任意长度输入压缩成固定长度摘要用于签名、消息认证、密钥派生等场景。本工程里一个关键配置是client-signature-schemes:-sm2sig_sm3它会写入 Kona 系统属性com.tencent.kona.ssl.client.signatureSchemessm2sig_sm3作用是让 ClientHello 告诉服务端客户端支持 SM2 SM3 的签名算法。4.3 SM4SM4 是分组密码算法。标准入口GB/T 32907-2016 SM4 分组密码算法。在 TLCP 里SM4 是握手后真正加密业务数据的对称算法。常见模式SM4-GCM SM4-CBC本工程默认套件TLCP_ECC_SM4_GCM_SM3 TLCP_ECC_SM4_CBC_SM35. TLCP、GMSSL、NTLS 名字怎么对齐不同生态里名字不完全一致名字常见来源大概含义TLCP国家标准、Tencent KonaGB/T 38636-2020 传输层密码协议GMSSL / GMSSL 1.1历史称呼、部分库/业务方通常指国密 SSL/TLCP 一类协议NTLSTongsuo/OpenSSL 衍生生态Tongsuo 中符合 GM/T 0024 SSL VPN 和 TLCP 的安全通信协议实现命名TLS 1.3 SMRFC 8998、部分云产品普通 TLS 1.3 框架中使用 SM2/SM3/SM4 套件Tongsuo TLCP 使用手册 中说明NTLS 在 Tongsuo 里指符合 GM/T 0024 SSL VPN 和 TLCP 协议的安全通信协议并强调其特征是加密证书/私钥与签名证书/私钥分离。所以你和服务端沟通时不要只问你们是不是国密应该问你们端口跑的是 TLCP/GMSSL/NTLS还是 TLS 1.3 RFC 8998 协议版本字符串是什么服务端密码套件名称是什么6. 为什么本工程选 Tencent KonaJava 里要做 TLCP核心问题是 JDK 默认 Provider 不够。Tencent Kona SM Suite 的官方 README 说明它是一组 Java 安全 Provider覆盖 SM2、SM3、SM4、TLCP/GMSSL、TLS 1.3 with RFC 8998 等能力并拆成多个模块Provider本工程用途KonaCryptoSM2/SM3/SM4 基础算法KonaPKIX国密证书、证书链、KeyStoreKonaSSLTLCP SSLContext、TrustManagerFactory、KeyManagerFactory本工程没有直接依赖一个“万能国密客户端”而是按 Java 安全体系拼装Security Provider → CertificateFactory / KeyStore / TrustManagerFactory → SSLContext → SSLSocketFactory → OkHttp → Forest这样好处是和 Java 生态兼容可以明确看到哪个环节失败可以在 Web 诊断页面展示证书、Provider、握手信息业务层仍然用 Forest 发 HTTP 请求不需要重写 multipart。7. 标准和实现之间的关系标准告诉你“协议应该是什么样”实现告诉你“这门语言里怎么用”。以本工程为例层次标准/实现在工程中的落点协议标准GB/T 38636-2020 TLCPprotocol: TLCPv1.1算法标准SM2/SM3/SM4 国家标准TLCP_ECC_SM4_GCM_SM3、sm2sig_sm3Java ProviderTencent KonaKonaProviderInitializer注册 ProviderHTTP 客户端Forest OkHttpDdFileUploadClient/InteractiveUploadService兼容补丁项目自定义 socket/session 包装TlcpProtocolMaskingSsl*也就是说标准没有直接告诉你怎么绕过 OkHttp 的枚举实现代码必须处理这些生态边界。8. 对接时的判断题8.1 对方说“我们是国密双证书”大概率是 TLCP/GMSSL/NTLS。你要继续问服务端签名证书和加密证书是否都配好了客户端是否需要双证书支持哪些套件ECC 还是 ECDHE端口是否只跑 TLCP8.2 对方说“我们是 TLS 1.3 国密套件”可能是 RFC 8998。你要继续问支持TLS_SM4_GCM_SM3还是TLS_SM4_CCM_SM3是否要求 SM2 证书Java 客户端使用哪个 Provider是否支持普通浏览器访问8.3 对方只说“SM2 证书”这不够。SM2 证书可以出现在不同协议里。你要问协议版本和密码套件。8.4 对方给你.cer文件这也不够。你要问它是根 CA中间 CA服务端签名证书服务端加密证书客户端证书不同证书放的位置完全不同。9. 本篇小结国际 HTTPS 主流基础是 TLS 1.2/1.3。RFC 8998 是 TLS 1.3 中使用国密算法的一种 profile不等于 TLCP。TLCP 是 GB/T 38636-2020 定义的传输层密码协议本工程使用TLCPv1.1。SM2、SM3、SM4 分别覆盖公钥、杂凑、对称加密能力。GMSSL、NTLS、TLCP 常在不同生态里混叫对接时必须问清协议版本和套件。本工程用 Tencent Kona 把国密算法、证书、TLCP SSLContext 接入 Java再桥接到 OkHttp/Forest。下一篇我们进入 TLCP 握手本身重点看双证书和密码套件。