服务器开发程序员必须搞清HTTPS通讯之证书( 三 )

  • version: 表示 PKCS#10 标准的版本号;
  • subject : 表示服务器主体的可分辨名称DN , 最重要的是CN值 , 表示证书需要包含的域名 , 可以包含多个;
  • subjectPKInfo: 服务器密钥对的公钥 , 可以是RSA公钥或ECDSA公钥 。服务器主体使用该密钥对的私钥对certificationRequestInfo进行数字签名最终生成CSR文件 。
3.3.3 CSR生成过程
  1. 服务器主体生成一对密钥对 , 如RSA密钥对;
  2. 生成CertificationRequestInfo结构体 , 主要包含域名、公钥;
  3. 使用私钥对CertificationRequestInfo进行数字签名得到签名值;
  4. 组合CertificationRequestInfo信息和签名得到最终的CSR文件 。
3.3.4 证书扩展扩展有标准和非标准两种 , 每个扩展都是一个OLD ASN.1结构 。每个扩展都有一个critical属性 , 如果该属性值为true , CA必须严格处理 。
3.3.5 证书分类根据验证模式分类
  • DV(Domain Validated)证书:最常见的一种证书类型 , CSR包含域名信息 , CA检验域名所有权 , 如果通过审核 , 申请者就有权申请该域名的证书 。校验方式有DNS TXT记录方式、服务器放置特殊文件方式 。
  • OV(Organization Validated)证书:CA机构对申请者的身份进行严格的审核 , 确保申请者的身份是真实的 。申请时间比DV证书要长 。
  • EV(Extended Validation)证书:对申请者进行更严格的审核 。
根据域名分类
  • 单域名证书
  • 泛域名证书
  • SAN(Subject Alternative Names)证书 , 可以把多个不同的注册域名合并到一张证书 。
  • SAN泛域名证书 。
四、 证书链1. 证书类型如在Chrome中看CSDN的证书:
服务器开发程序员必须搞清HTTPS通讯之证书

文章插图
 
  1. 服务器实体在配置HTTPS的时候 , 不只是配置服务器实体证书 , 还涉及其它证书;
  2. 证书链的理解:
  • DigiCert信任了GeoTrust RSA CA 2018
  • GeoTrust RSA CA 2018信任了*.csdn.net
上面证书类型分为了:
  • 服务器实体证书
  • 中间证书
  • 根证书:自签名证书 , 位于证书链中的最顶端 。
在使用Certbot客户端工具生成的证书中 , fullchain.pem包含了cert.pem和chain.pem文件的内容 , 构成了完整的证书链 。cert.pem在fullchain.pem文件的最顶端 。根证书预嵌入到了浏览器中 , 配置Nginx和Apache的时候 , 只需要fullchain.pem , 不需要包含根证书 。
2. 信任链校验
  1. 浏览器连接至一个https网站
  2. 服务器发完整证书给浏览器 , 如fullchain.pem 。对X.509标准来说 , 服务器应该发送完整的证书链(不包含根证书) 。如果发送的证书不完整 , 客户端可以找到所有的证书链 , 但有的浏览器可能不会这样做 , 造成不兼容 。
    通过服务器实体证书找到完整证书链的方法 , 从中解析CA密钥标识符 , 进而获取上一级中间证书文件 , 通过中间证书的CA密钥标识符继续向上找到根证书 。
  3. 校验证书链关系
    浏览器要信任每张证书 , 必须确保每个证书(除了根证书)的签发者都是它的上一级证书的使用者(subject) 。如果不符合 , 证书校验就会失败 。
3. 根证书linux各个发行版中 , OpenSSL库会集成根证书openssl version -a
服务器开发程序员必须搞清HTTPS通讯之证书

文章插图
 
windows在HKEY_CURRENT_USER注册表管理根证书
Mozilla在NSS底层独立维护了可信任的根证书库 。
五、CRL 证书吊销列表CRL(Certificate Revocation List) , 是PKI技术的重要组成部分 。CRL是TLS/SSL协议的一部分 , X.509 V2 标准定义了CRL的语法和语义信息 , CRL结构类似于证书 , 也使用ASN.1 结构来解释其含义 。
六、OCSPCRL正逐步被OCSP替代(在线证书状态协议 , Online Certificate Status Protocol) , 定义在RF6960文档中 , 主要目的是为了替换CRL , 更好地核实证书的使用 。
七、证书格式1. DERASN.1是一种抽象的数据结构 , 描述了复杂的对象 。证书本质是一个文件 , 要通过一个规则把ASN.1转换为二进制文件 。在X.509证书中 , 使用的编码方式是 Distinguished Encoding Rules(DER) 。


推荐阅读