• 证书相关知识总结


    基础概念

    从HTTP到HTTPS

    HTTP的全称是HyperText Transfer Protocol ,叫做超文本传输协议。可以看下图,HTTP的存在一些安全问题:

    1)数据没有加密

    2)数据易篡改

    3)无法验证身份

    image-20210109202216848

    不仅是HTTP,整个互联网的信息安全都会面临这些问题,对于这些问题,有对应的密码技术可以解决。

    image-20210109203111314

    对称密码

    image-20210109203213464

    密文=E(明文,算法,密钥)

    明文=D(密文,算法,密钥)

    对称密码主要用于加密和解密。

    公钥密码

    image-20210109203324891

    公开密钥算法可以用于加密解密、密钥协商、数字签名。

    公开密钥算法的密钥是一对密钥,分别是公钥和私钥。私钥只有密钥对的生成者持有,而公钥是可以

    公开的,任何人都能拿到公钥。

    数字签名

    通信双方无法确认对方的身份,也就不能进行身份验证,为了防止通信事后的否认,可以用数字签名

    技术。

    image-20210109203427328

    RSA签名生成

    image-20210109203454461

    RSA签名验证

    证书介绍

    证书

    为了确保机密性我们需要密钥,为了解决密钥的配送问题我们又需要公钥,为了防止公钥被伪造的问题我们又需要证书。

    HTTPS中用的是X.509标准证书,用ASN.1标准来描述X.509标准证书:

    X.509标准证书结构:

    Certificate ::= SEQUENCE { 
        	tbsCertificate     TBSCertificate,                                       	
        	signatureAlgorithm  AlgorithmIdentifier,              	
        	signature 	     BIT STRING 
    }
    

    TBSCertificate结构

    TBSCertificate ::= SEQUENCE { 
    	version [0] Version DEFAULT v1, 
    	serialNumber CertificateSerialNumber, 
    	signature AlgorithmIdentifier, 
    	issuer Name, 
    	validity Validity, 
    	subject Name, 
    	subjectPublicKeyInfo SubjectPublicKeyInfo, 
    	issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, 
    			-- If present, version MUST be v2 or v3 
    	subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, 
    			-- If present, version MUST be v2 or v3 
    	extensions [3] Extensions OPTIONAL 
    			-- If present, version MUST be v3– 
    }
    

    证书分类

    根据审核的宽松程度分为以下三类:

    1、DV证书:DV证书的审核时间会非常快,一般适用于个人网站。

    2、OV证书:一般来说,企业和政府机构一般会申请OV证书,由于审核申请者的身份需要时间,申请OV证书完成的时间比DV证书申请完成的时间要长。

    3、EV证书:一般来说,银行、电商企业、政府机构会申请EV证书,申请EV证书完成的时间比OV证书申请完成的时间要长。

    根据域名分为以下四类:

    1、单域名证书

    2、泛域名证书:www1.example.com、www2.example.com

    3、SAN(Subject Alternative Names)证书:www.example.com、www.example.cn

    4、SAN范域名证书:www.example.comwww.example.cn、*.example.org

    证书链

    证书信任链的终点就是Root CA的证书,他是自己给自己做数字签名,用自己的公钥对证书做数字签名校验,这类证书叫做自签名证书。

    image-20210109203958653

    服务器实体证书的校验

    浏览器首先根据X.509标准解析服务器实体证书,进行如下校验:

    (1)浏览器访问的域名是不是与证书使用者可选名称(SAN)扩展包含的域名匹配,如果不匹配,校验失败。

    (2)日期校验,证书包含有效期,生效时间位于{notBefore, notAfter}区间,如果证书过期,校验失败。

    (3)证书扩展校验,如果扩展Critical被标识为True,客户端必须正确处理该扩展,否则校验失败。

    (4)对于服务器实体证书来说,其包含了一个公开密钥算法的公钥,需要校验该公钥的用途。校验方法就是判断密钥用法(Key Usage)扩展,该扩展对应的值如果不包含数字签名(Digital Signature)和密钥协商(Key Encipherment),校验失败。

    中间证书的校验

    和服务器实体证书一样,每个中间证书也要进行校验。

    (1)日期校验,校验证书有效期。

    (2)证书扩展Critical如果标识为True,必须校验。

    (3)中间证书也包含一个公钥,需要校验该公钥的用途,校验方法就是判断密钥用法

    (Key Usage)扩展,该扩展对应的值如果不包含Digital Signature(数字签名)、

    Certificate Sign(签名证书)、CRL Sign(签署CRL),校验失败。

    (4)校验基础约束(basic constraints)扩展,校验中间证书是否能够签发证书,

    如果不允许签发,校验失败。

    CRL

    由于某些原因,仅仅校验服务器实体证书并不能确定服务器实体的身份,需要通过一种机制校验

    证书的吊销状态,如果证书处于吊销状态,表明服务器实体身份校验失败。吊销最主要的原因是

    服务器实体发现证书对应的密钥对(主要是私钥)被泄露了。

    有两种机制能够完成该工作,分别是CRL(Certificate Revocation List,证书吊销列表)和OCSP。

    CRL。

    CRL是一个文件,和证书一样,也是一个结构化文件,每个CA机构将所有的吊销证书(由其签发的)

    集成在一个文件中,这就是CRLs(Certificate RevocationLists)。CRLs相当于一个黑名单,包含

    了所有被吊销服务器实体证书的序列号和吊销原因,如果一个待校验服务器实体证书的序列号能够

    匹配CRLs,表示该证书被吊销了。

    OpenSSL管理证书

    # PEM格式转换为DER格式

    $ openssl x509-in cert.pem -out cert.der -outform DER
    

    # DER格式转换为PEM格式

    $ openssl x509-in cert.der -inform DER -out cert.pem -outform PEM
    

    # PEM格式转换成PKCS#12格式

    $ openssl pkcs12 -export -out cert.pfx -inkey privkey.pem -in cert.pem -certfile chain.pem
    

    # 导出密钥对

    $ openssl pkcs12 -in cert.pfx -nodes -nocerts -out new_privkey.pem
    

    # 导出服务器实体证书

    $ openssl pkcs12 -in cert.pfx -nodes -clcerts -out new_cert.pem
    

    # 导出中间证书

    $ openssl pkcs12 -in cert.pfx -nodes -cacerts -out new_chain.pem
    

    SSL/TLS

    SSL(Secure Socket Layer,安全套接层)与TLS(Transport Layer Security,传输层安全)是不同的,TLS相当于是SSL的后续版本。

    SSL/TLS是世界上应用最广泛的密码通信方法,学习SSL/TLS最好的方法之一就是阅读RFC文档。

    image-20210109204829122

    image-20210109204847547

    image-20210109204900496

    image-20210109204921971

    TLS握手协议

    TLS协议子协议关系图:

    image-20210109205027507

    TLS握手协议:

    image-20210109205046116

    Chromium中代码

    服务器证书校验

    在Chromium v47上,服务器证书校验代码在 net/cert/cert_verify_proc_openssl.cc

    校验函数:

    X509_verify_cert(ctx.get())
    

    在Chromium v73上,服务器证书校验代码在 net/cert/cert_verify_proc_nss.cc

    校验函数:

    SECStatus status =PKIXVerifyCert(cert_handle, check_revocation, false, NULL, 0, trust_anchors.get(), &crlset_callback, cvout);
    

    客户端证书处理

    下面这个图是Chromium v47的版本的相关类图,可以看到用的是OpenSSL,在更高版本的Chromium浏览器中,已经改成了NSS处理证书。

    image-20210109205407397

    工具介绍

    Linux证书管理

    在Linux上,Chromium使用NSS Shared DB 管理证书。

    1. 工具获取:
    sudo apt-get install libnss3-tools
    
    1. 工具使用:

    2.1. 列出所有证书

     certutil -d sql:$HOME/.pki/nssdb –L
    

    2.2. 列出指定证书的具体信息

     certutil -d sql:$HOME/.pki/nssdb -L -n <certificate nickname>
    

    2.3. 向数据库中导入证书

     certutil -d sql:$HOME/.pki/nssdb -A -t <TRUSTARGS> -n <certificate nickname>  -i <certificate filename>
    

    2.3.1. 导入root CA证书,其TRUSTARGS就是“C,,”

    2.3.2. 导入中间CA证书,其TRUSTARGS就是“,,”

    2.3.3. 导入自签名的服务器证书,其TRUSTARGS就是“P,,”

    2.4. 导入个人证书和私钥

     pk12util -d sql:$HOME/.pki/nssdb -i PKCS12_file.p12
    

    这里的TRUSTARGS被默认设置为“u,u,u”

    2.5. 删除证书

     certutil -d sql:$HOME/.pki/nssdb -D -n <certificate nickname>
    

    相关学习工具

    1、在线网站:

    SSL Server Test:https://www.ssllabs.com/ssltest

    SSL Client Test:https://clienttest.ssllabs.com:8443/ssltest/viewMyClient.html

    2、OpenSSL工具集:

    $ openssl s_client -connect www.example.com:443

    该命令可以了解整个HTTPS的交互。

    3、Wireshark、tcpdump等抓包工具:

    SSL/TLS的几个子协议特别是握手协议内容是明文传输的,所以可以通过抓包分析其过程。

  • 相关阅读:
    字符串匹配算法
    C#中窗体的位置和大小
    关于C#值类型,引用类型,值传递,引用传递(转载)
    ArcMap中设置.mxd相对路径
    统计学上的知识
    .NET 数学实现资料(ZZ)
    牛腩新闻系统学习笔记06讲 编写SQLHelper
    DropDownList 控件不能触发SelectedIndexChanged 事件的另一个原因
    牛腩新闻视频 03讲 数据库设计的心得 如何建立外键sql2008的数据库关系图功能
    使用sql server management studio 2008 连接数据库,无法查看数据库,提示 无法为该请求检索数据 错误916
  • 原文地址:https://www.cnblogs.com/SuzanneHuang/p/14256481.html
Copyright © 2020-2023  润新知