ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

【证书】证书相关知识

【证书】证书相关知识 1.公钥1.1 本质就是很大的数有数字e, n 看到的如下的一些.pem文件中的密钥是数经过base64编码得到的字符串便于文本传输-----BEGIN RSA PRIVATE KEY-----xxxxx......-----END RSA PRIVATE KEY-----1.2 作用1.2.1 验证签名验签过程是如下的数学运算e, n 公钥的数 可以从base64编码后的字符串中解析出来s 签名由私钥生成pad(H(M)): 运算结果是原始数据的哈希值H: 哈希运算常用sha256M: 原始明文数据pad: 表示填充1.2.2 加密也是数学运算2. 私钥2.1 本质也是很大的数同公钥一样但是有很多数常用的这里有d, n。也是pem文件里面一堆字符串是base64编码所得解析编码体可以解析出d, n 。这个跟公钥是一样的2.2 作用2.2.1 签名含义同公钥2.2.2 解密含义同公钥3. 密钥总结项目RSA 加密RSA 签名使用密钥公钥 (e,n) 加密私钥 (d,n) 解密私钥 (d,n) 签名公钥 (e,n) 验签输入内容原始短明文 M原文的哈希摘要经过填充目的保密不让第三方看到明文证明数据是谁发的有没有被篡改能否反向推导密文只能私钥解密签名不能恢复原始原文只能校验哈希上述举例是RSA 它的加密和签名底层的数学是用同一套 模幂运算只是指数反过来总结私钥私有公钥公开私钥验名公钥验签处理的数据是明文哈希经过填充私钥解密公钥加密 处理的是双端会话传输数据底层逻辑是数学运算4. 证书4.1 证书内容以X.509为例证书包含服务器公钥、域名、有效期、主体名称等叫证书明文数据 T4.2 签名及验签签发证书服务器会将服务器公钥、证书等一起下发给客户端1. CA 计算Hash(T)→ 得到摘要固定长度比如 SHA2562. CA 用自己的私钥对这个哈希摘要做签名运算 → 得到数字签名 S3. 把【明文 T 签名 S】打包在一起 → 就是 X.509 证书验签证书客户端客户端拿到证书明文 T 签名 S客户端本身持有CA根证书的公钥如果是中间证书的公钥可由服务器下发获取1. 客户端对明文 T 重新算一次哈希Hash(T)证书中已经指定了使用的哈希算法客户端使用该算法计算哈希2. 用CA 公钥验证签名 S得到 CA 那边算出来的填充哈希移除填充得到原始哈希3. 对比两个哈希相等 验签通过说明内容没篡改、确实是 CA 签的。服务器提交信息 → 构造 tbsCertificate(待签名证书明文) ↓ CA计算 hash SHA256(tbsCertificate) ↓ 对hash做填充 pad() ↓ sig pad(hash)^d mod n # d,n来自CA的RSA私钥 ↓ 组装tbsCertificate 签名算法标识 sig → 最终X.509证书4.3 证书吊销证书是有有效期的但还没到期就失效就叫吊销。 场景举例服务器私钥泄露了黑客拿到私钥可以冒充服务器证书虽然还没过期但必须立刻作废。域名转让、服务器下线不再使用这个证书。证书吊销 CA 对外宣告这份证书虽然时间没到但不再可信禁止使用客户端 TLS 握手时需要确认证书有没有被吊销。两种主流查询机制CRL证书吊销列表CA 维护一个文件里面列出所有被吊销证书的序列号客户端下载整个列表查证书序列号是否在里面。缺点列表会越来越大。OCSP在线证书状态协议客户端联网单独向 OCSP 服务器查询「这个证书序列号是否吊销」只查单条记录更常用。⚠️ 注意 有些环境会配置 OCSP stapling服务器提前去 CA 查询自己证书状态把 OCSP 响应一起发给客户端客户端不用单独连外网 OCSP 服务器。一句话有效期是 “自然过期”吊销是主动提前作废证书。5. TLS流程服务器【持有服务器私钥 服务器证书】 ↓ 1.握手下发证书 客户端 ←---- 服务器证书(服务器公钥CA签名信息) ↓ 2.客户端校验证书 ┌────────────────────────────────┐ │ 客户端本地根CA公钥校验CA签名 │ │ 检查有效期、域名、吊销状态 │ └───────────┬────────────────────┘ ↓ 验证成功 信任证书内的服务器公钥 ↓ 客户端生成随机密钥【服务器公钥加密】→发给服务器 ↓ 服务器用【服务器私钥】解密拿到随机密钥 ↓ 两端生成相同对称会话密钥 ↓ 业务数据对称加密传输注意点服务器下发给客户端的除了证书本身的CA签名外还有明文T数据哈希算法标记等等以及服务器的公钥这个是服务器的跟CA证书的密钥对不是一回事CA证书的密钥对签名验签 证明证书可信服务器的密钥对加密解密 用于证书可信后服务器与客户端之间业务数据的对称加密传输6. 证书链6.1 证书链问题上述说的例子前提是RSA X.509还有就是直接使用CA证书进行签名验签实际上多数情况是有证书链的。如下根CA → 签发中间CA证书 → 中间CA签发网站服务器证书TLS 握手时服务器除了下发服务器叶子证书一并把中间 CA 证书发给客户端。 客户端拿到中间证书里面带有中间 CA 的公钥用来验证叶子证书签名 然后继续往上验签中间证书直到找到本地内置的根证书完成整条链校验。6.2 证书链场景TLS流程1. 客户端收到服务器发来服务器叶子证书 中间 CA 证书2. 客户端用中间 CA 证书内的公钥校验服务器证书签名3. 客户端校验中间 CA 证书的签名在本地系统证书库寻找根 CA 证书4. 找到本地根证书取出根 CA 公钥校验中间 CA 证书签名5. 整条链全部验签通过再检查有效期、吊销状态、域名匹配6.2 CA公钥来源客户端的CA公钥怎么来的呢一般情况下预先内置在客户端本地系统 / 浏览器里获取 CA 公钥本地预装/ 握手时服务器下发不访问 CA 服务器检查证书有没有吊销联网访问 OCSP/CRL 服务器查询证书状态注意上述两种场景CA公钥获取以及查看证书是否吊销不能混淆
返回列表