<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Tls on 编程技术记录</title>
    <link>https://blog.z6z8.cn/tags/tls/</link>
    <description>Recent content in Tls on 编程技术记录</description>
    <generator>Hugo</generator>
    <language>zh-Hans</language>
    <lastBuildDate>Wed, 10 Dec 2025 02:26:48 +0000</lastBuildDate>
    <atom:link href="https://blog.z6z8.cn/tags/tls/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>TLS证书签发流程</title>
      <link>https://blog.z6z8.cn/2025/12/10/tls%E8%AF%81%E4%B9%A6%E7%AD%BE%E5%8F%91%E6%B5%81%E7%A8%8B/</link>
      <pubDate>Wed, 10 Dec 2025 02:26:48 +0000</pubDate>
       <guid isPermaLink="false">https://blog.z6z8.cn/?p=1524</guid> 
      <description>&lt;h1 id=&#34;签发类型&#34;&gt;签发类型&lt;/h1&gt;
&lt;p&gt;根据签发机构类型，TLS证书签发可以划分为两种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;公信CA（Certificate Authority）签发的证书&lt;/strong&gt;（如DigiCert、Let’s Encrypt、Sectigo等）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;企业内部私有CA签发的证书&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;公信CA签发与企业内部私有CA签发，两者的区别是公信力不同。一般情况下，互联网环境不应信任企业内部私有CA签发的证书。&lt;/p&gt;
&lt;p&gt;下面主要详细说明最常见的 &lt;strong&gt;公信CA签发域名验证（DV）、组织验证（OV）、扩展验证（EV）证书的过程&lt;/strong&gt;，以及全网最流行的免费证书Let’s Encrypt为例的自动化流程。&lt;/p&gt;
&lt;h1 id=&#34;公信ca签发证书的通用流程dvovev&#34;&gt;公信CA签发证书的通用流程（DV/OV/EV）&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;生成CSR（Certificate Signing Request，证书签名请求）&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在你的服务器上首先生成一对密钥：私钥（private key）和公钥（public key）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用私钥生成CSR文件，CSR里包含了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;域名（Common Name 或 SAN 列表）&lt;/li&gt;
&lt;li&gt;组织信息（OV/EV证书需要）&lt;/li&gt;
&lt;li&gt;公钥&lt;/li&gt;
&lt;li&gt;国家、省份、城市、公司名称等（OV/EV需要）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;常用命令（OpenSSL）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;openssl req -new -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;选择CA并提交申请&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;登录CA官网（或通过ACME协议自动化），选择证书类型（DV/OV/EV）、有效期。&lt;/li&gt;
&lt;li&gt;上传CSR（或者有些CA让你直接在网页填写信息后帮你生成）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;域名控制权验证（DCV，Domain Control Validation）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这是所有公信证书都必须完成的步骤，证明你确实控制这个域名。常见三种方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HTTP验证&lt;/strong&gt;（最常见）：CA给你一段随机token，你需要在域名下 &lt;code&gt;.well-known/acme-challenge/&lt;/code&gt; 路径放一个特定文件&lt;/p&gt;
&lt;p&gt;示例： &lt;a href=&#34;http://yourdomain.com/.well-known/acme-challenge/xxxxxx&#34;&gt;http://yourdomain.com/.well-known/acme-challenge/xxxxxx&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;DNS验证&lt;/strong&gt;：CA给你一段TXT记录，你需要在域名DNS管理面板添加 _acme-challenge.yourdomain.com TXT &amp;ldquo;xxxxxx&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Email验证&lt;/strong&gt;（较少用）：给域名whois邮箱或管理员邮箱（如admin@、webmaster@）发邮件，点链接确认&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;DV证书只做这一步；OV/EV还要额外验证组织合法性。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;（OV/EV专属）组织信息验证&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;核实公司工商注册信息（通过第三方数据库如Dun &amp;amp; Bradstreet）&lt;/li&gt;
&lt;li&gt;核实营业执照、法人身份&lt;/li&gt;
&lt;li&gt;电话回访确认申请人身份和授权&lt;/li&gt;
&lt;li&gt;验证域名管理权归属公司（whois + 额外证明文件）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CA签发证书&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;CA用自己的中间证书或根证书的私钥，对你的公钥+域名+有效期等信息进行签名，生成证书文件（.crt 或 .pem）&lt;/li&gt;
&lt;li&gt;同时会下发CA链证书（中间证书 bundle,参考下面附录）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;下载并安装证书&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;你把证书、公钥、私钥安装到Web服务器（Nginx/Apache/IIS等）&lt;/li&gt;
&lt;li&gt;重启服务，以使证书生效&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;最常见的自动化签发lets-encryptacme协议&#34;&gt;最常见的自动化签发：Let’s Encrypt（ACME协议）&lt;/h2&gt;
&lt;p&gt;Let’s Encrypt是目前全球使用量最大的免费CA，90天有效期，完全自动化。&lt;/p&gt;</description>
    </item>
    <item>
      <title>TLS 1.3前向安全的通俗解释</title>
      <link>https://blog.z6z8.cn/2025/11/26/tls-1-3%E5%89%8D%E5%90%91%E5%AE%89%E5%85%A8%E7%9A%84%E9%80%9A%E4%BF%97%E8%A7%A3%E9%87%8A/</link>
      <pubDate>Wed, 26 Nov 2025 10:12:02 +0000</pubDate>
       <guid isPermaLink="false">https://blog.z6z8.cn/?p=1509</guid> 
      <description>&lt;h1 id=&#34;前向安全&#34;&gt;前向安全&lt;/h1&gt;
&lt;p&gt;前向安全（Forward Secrecy，简称 PFS）是 TLS（以及其他加密协议）中一个非常重要的安全属性，简单来说：
“即使攻击者将来拿到了服务器的长期私钥（即证书私钥），也无法解密之前已经完成的所有 TLS 会话”
这就是前向安全的核心意义：过去的通信记录永远是安全的，即使私钥彻底泄露。&lt;/p&gt;
&lt;p&gt;前向安全在TLS 1.3中强制开启的，安全性由 &lt;strong&gt;椭圆曲线离散对数问题（ECDLP）&lt;/strong&gt; 保障&lt;/p&gt;
&lt;h1 id=&#34;ecdh椭圆曲线-diffie-hellman最核心的数学原理&#34;&gt;ECDH（椭圆曲线 Diffie-Hellman）最核心的数学原理&lt;/h1&gt;
&lt;p&gt;一句话就能说清楚： &lt;strong&gt;“乘法可以随便做，除法几乎做不出来”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们用最常用、最直观的曲线 &lt;strong&gt;X25519 / Curve25519&lt;/strong&gt; 来解释（TLS 1.3 里 90% 以上用的就是它）。&lt;/p&gt;
&lt;h4 id=&#34;1-公共参数全世界都一样&#34;&gt;1. 公共参数（全世界都一样）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;选定一个安全的椭圆曲线：y² = x³ + 486662x² + x（模 2²⁵⁵-19）&lt;/li&gt;
&lt;li&gt;选定一个基点（base point）G，一个固定的点，坐标是已知的：
G = (9, 447…)（具体数字不重要，只要大家用同一个就行）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;2-双方各自生成临时私钥就是随机数&#34;&gt;2. 双方各自生成临时私钥（就是随机数）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;爱丽丝（Alice，客户端）随机选一个 256 bit 的整数作为私钥：&lt;/p&gt;
&lt;p&gt;a = 随机数（比如 3f1a…c2，绝对保密！）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;鲍勃（Bob，服务器）也随机选一个 256 bit 的整数：&lt;/p&gt;
&lt;p&gt;b = 随机数（比如 7d2b…e9，绝对保密！）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;3-计算并公开公钥其实就是把私钥乘以基点-g&#34;&gt;3. 计算并公开“公钥”（其实就是把私钥乘以基点 G）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;爱丽丝算出自己的临时公钥：&lt;/p&gt;
&lt;p&gt;A = a × G&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;鲍勃算出自己的临时公钥：&lt;/p&gt;
&lt;p&gt;B = b × G&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
