什么是TLS/SSL证书
SSL证书跟驾照有点类似。在驾照里,关键信息有几点:
- 我是谁
- 驾照是谁颁发的
- 驾照是否过期
在SSL证书里也是类似的:
- 我是谁(域名、实体是谁)
- 证书是由谁签发的
- 证书是否过期
所以,一个SSL证书可以这么定义:由无条件信任的机构颁发给实际使用者来提供身份认证的一段数据编码。
证书的编码
X.690定义了ASN.1用到的几种编码格式:
- Basic Encoding Rules(BER)
- Canonical Encoding Rules(CER)
- Distinguished Encoding Rules(DER)
其中: BER是最基本的编码格式。CER和DER都算是BER的一个子集。CER和DER的编码都可以用BER来表示。 在x.509中一般使用CER和DER编码。DER的明显特征之一是会指定字段的长度。而CER则使用end-of-contents标记来表示结束。 所以,一般建议如果内存足够的话,使用DER会更合适一些。而CER则适合用来编码哪些非常大的数据结构。
常见的证书后缀名有:
- .pem - (Privacy-enhanced electronic mail) base64 encoded DER certificate, 以"BEGIN CERTIFICATE"开头"END CERTIFICATE" 结尾。
- .cer, .crt, .der: 通常表示为二进制的DER格式。
证书的生命周期
申请证书
- 证书申请方创建一个证书签名请求certificate signing request(CSR)
- 证书申请方创建一对密钥(pubkey/prikey)并用prikey来签名csr文件。这包括了请求方的身份信息以及应用的公钥信息用来验证csr的摘要信息以及对应的名称(distinguished name),以及其它额外的信息。
- 将请求信息发给CA,由CA来验证证书合法性
CA验证证书
CA收到请求之后会进入到验证流程。不同的验证类型会有不同的步骤。
Domain validation(DV)
DV认证只需要证书申请方证明域名是自己的就可以。这可能会有几种方式: a. 使用提供的邮箱地址(whois检查,比如)发送验证邮件给CA。 b. 通过对域名添加特定的cname记录来证明域名是自己的(cf的模式)
Organization validation(OV)
OV认证相比于DV认证会复杂一些,它要求身份认证和机构真实性认证。
Extended validation(EV)
相比于OV认证,EV认证更为复杂,一般来说需要用户的身份认证、机构真实性认证、用户签订承诺函等等。
DV的验证速度取决于邮件接收到的速度或者cname记录认证成功的速度(letsencrypt大概可以做到秒级别),EV证书可能需要数天甚至数周。
验证通过之后使用证书
通过之后CA会签发对应名称(distingu name)的证书。这个证书可能包含证书链,即:从根CA开始到经过的每一级CA到最终的用户证书都会包括。这样才能满足证书认证的机制,如果之后末级证书,那么很有可能会无法认证通过,导致浏览器出现不安全请求的提示。
此时,证书申请方就可以使用该证书了。除非证书被显式吊销,否则只要妥善保管到证书过期之后重新签订新的证书就可以了。
证书过期&吊销目前有2种机制
CRL(Certificate revocation list)CRL就是一个列表,该列表保存了所有吊销证书的序列号。该列表由CA来维护。依赖方(浏览器)需要保持更新该列表,但是可能会越来越大。
OCSP(online certificate status protocol)OCSP允许依赖方检查一个证书是否已经被吊销。OCSP服务器也被称为OCSP响应器。每个CA的OCSP响应器的地址在证书的Authority Information Access扩展字段里。虽然相比于CRL,OCSP更为轻量级(只获取一个证书是否过期),但是由于需要请求线上的OCSP应答器,所以可能会存在请求失败的情况。所以现在有一个叫做:OCSP stapling(OCSP闭合)的技术,该技术可以在tls握手的时候传入本地缓存的OCSP结果。通过这种机制来减少握手的失败率和降低请求时延。
证书结构
一个常见的HTTPS证书包含如下信息:
version
serialNumber
signature algorithm id
issuer
name
validity period
not before
not after
subject name
subject public key info
public key algorithm
subject public algorithm
isuuer unique identifier
subject unique identifier
extensions
SSL
随着非对称加密算法的发展,我们可以通过“不安全”的设备放心跟朋友进行“安全的”互联网交流,比如:购物等等。但是,如果只有非对称加密算法的话,我们还是会遇到其他问题,比如: 我们如何确信这个人就是我们要沟通的那个人?所以,这就需要PKI来解决这个问题了。
PKI(公开密钥基础建设)
公开密钥基础建设(英语:Public Key Infrastructure,缩写:PKI),又称公开密钥基础架构、公钥基础建设、公钥基础设施或公钥基础架构,是一组由硬件、软件、参与者、管理政策与流程组成的基础架构,其目的在于创造、管理、分配、使用、存储以及撤销数字证书。
密码学上,公开密钥基础建设借着数字证书认证机构(CA)将用户的个人身份跟公开密钥链接在一起。对每个证书中心用户的身份必须是唯一的。链接关系通过注册和发布过程创建,取决于担保级别,链接关系可能由CA的各种软件或在人为监督下完成。PKI的确定链接关系的这一角色称为注册管理中心(Registration Authority,RA)。RA确保公开密钥和个人身份链接,可以防抵赖。
可信赖的第三者(Trusted third party,TTP)也常被用来指证书中心。PKI有时被错误地拿来代表公开密钥密码学或公开密钥算法。
对于大部分人来说,PKI就是用在互联网上的。但是事实上,PKI的定义要更加的宽泛,但是在这里,我们只是讨论跟互联网相关的PKI。即: Internet PKI。
Internet PKI生命周期
名词解释:
Subscriber
Subscriber(或者:端实体)加密服务提供方,需要一个证书来表明自己的身份。
RA(Registration authority,注册管理中心)
RA提供证书签发相关的管理方法。比如: 在请求CA申请证书之前,RA可以先验证一下申请方的身份等。RA也被称为本地注册管理中心(local registration authorties)。不过一般的CA也会负责RA相关的工作。
CA(Certification authority,证书认证机构)
CA就是我们无条件相信的证书管理机构。
Relying Party
relying party就是证书的消费者。一般来说就是我们用户的浏览器或者其它需要进行加密通信的客户端、程序等。
什么是trust?
在TLS/SSL领域中,trust和我们日常生活中的trust有一点不同。浏览器验证一个网站是可信的(trust) 是验证了它的证书和域名是能够对应得上。并且证书由合法CA签发且证书没有过期或者吊销。但是对于网站所提供的信息并不能保证完全可信(这个可信就是我们日常生活中的trust了)。