专栏首页CDN及云技术分享深入了解SSL证书的要素和管理
原创

深入了解SSL证书的要素和管理

一、证书需要哪些要素?

1.1. 证书的拥有者

证书是向对端证明SSL通信的安全身份,证明他是访问url的host域名的所有者。所以首先证书需要有域名信息。其实这里不止包括域名,精确地说,应该是可以表明服务端身份的信息。包括名字(Common Name,CN),组织单位(Organaziont Unit, OU),组织(Organazation,O),地理信息包括城市(Locality,L),洲/省(State, S), 国家(Country,C)。这里的属性甚至可以出现多次或者不填,他们是可选的。issureUniqueId。

CN如果是多域名/泛域名证书用分号隔开。多域名证书的好处是只需要考虑一本证书的有效期。管理维护方便。

1.1.1 问题1:能注册 *.com吗?

1.1.2 问题2: *\0.badguy.com注册证书有问题吗。

这个要求CA要么拒绝签发此类证书,即便他是badguy.com域名的所有者。同时要求tls通信双方做CN名字匹配需要做长度校验然后在比较字符。改进的表示RFC2247。使用了DC字段表示域名。www.whizbang.com用DC=www. DC=whizbang, DC=com。

1.2. 证书的签发者

怎么证明证书的信息是准确的,怎么认定拥有者身份有效的。那么就需要他的证书是不是注册机构是公认权威的。在知名的权威机构签发。要做到两道:由机构签发业务证书,证书本身附带有机构签名。(其实就是颁发者->证书所有者 这个信任链怎么签发的)

1.2.1 信任链:

颁发这本证书肯定不能伪造的,需要是公开权威的证书颁发机构。。这个信任链的是通过证书签名请求实现的(Certificate Signing Requests, CSRs)。

CA拿到了所有者提交的CSR请求,根据CN名字验证。注册者提供的CN‘如果是域名,应该是可被解析,查到域名所有者的信息。

CA检查什么? CA根据注册者提交的CN(common name)和ST(State,地址)。CA根据域名去ARIN数据库提交WHOIS查询,确保是真实身份。

注册者身份验证过后,CA创建X.509版本的证书。证书携带上诉必要信息外,还携带了CA私钥处理过的签名(这个是信任链的基础)。签名是对整个证书的hash进行私钥加密。PKCS#7

所以,客户端只要携带知名CA的公钥。都可以对这本证书的真伪做验证。

1.2.2 防止信任链扩散的问题

知名CA要求除了业务证书的每一个信任链上级都是权威知名的。客户端校样每级CA,不止是root,防止每一级业务签发

  • 正常的信任链:root ->delegate -> service certificate
  • 不正常的信任链(信任扩散): root ->delegate -> legitimately obtained server certificate --> certificate identifying any web server

1.2.3 CA: 自签证书(局域网内的CA)

创建密钥对,生成证书信息(带公钥),使用自身私钥签名证书,发布证书。

创建密钥对,公钥和证书所有者包含在PKCS#10,使用私钥签名CSR,但是CA不知道私钥。被签名的请求在通信通道传输不会被串改窥探。签名还证明了 发送方是拥有私钥的所有者。

1.3. 有效期

证书不是无期限有效。比如说注册者身份变更,或者由于时间流逝科技的进步,一些隐匿的安全漏洞暴露出来,CA考虑重新签发证书。CA设置了证书的时间有效期。

所以只是在一个有期限内 证书才是合法身份。另外提的是证书即将过期是没有任何提醒的。时间也可以说是时间窗口,在窗口时期内的证书是有效的。时间年份是可以是两位数,表示的是20XX年。

那如果在有效期内,私钥被偷了,那么中间攻击者又可以假冒服务端进行攻击了,如果你想加速这个证书的失效,那么只能采用CRL(certificate revocation list)机制。CRL收集了失效的证书序列号,当攻击者尝试用该序列号连接时,客户端进行拒绝。

1.4. 公钥(subjectPublicKeyInfo)

至此,我们有了必要的信息证明证书就是域名本身:客户端检测了issuer,validity period,subject信息。

SubjectPublicKeyInfo ::= SEQUENCE {

algorith AlgorithmIndentifier,

subjectPublicKey BIT STRING

}

RSAPublicKey ::= SEQUENCE{

  modulus INTERGER, --n

publicExponent INTERGER --- e

}

DHPublicKey ::=

DH

AlgorithmIdentifeier ::= SEQUENCE {

algorithm OBJECT IDENTIFIER,

parameters ANY DEFINED BY algorithm OPTIONAL

}

DomainParameters ::= SEQUENCE {

p INTERGER,

g INTERGER

q INTERGER

j INTERGER OPTIONAL

}

y=g^a%p。 y^b%p。

grep -v -- ----- /usr/local/services/ssl_agent/ca/wildcard_domain.sports.qq.com.v2.pem | tr -d '\n' | base64 -d | openssl asn1parse -inform DER

图1、证书要素

证书一般保存着公钥,一系列信息例如DNS 名字,防止网络中间者私自签发自己的公钥,每个公钥做权威的认证。

CA认证会做包括域名 注册信息等。因为中间者攻击 可能采用的也是CA签发的证书,但是域名是数字签名保护,中间攻击者不能伪造域名(为什么呢)

CA签发者不是唯一一家,客户端可以选择是否信任这个CA机构。

二、证书的编码格式

2.1、什么是ASN.1编码(X.509 v3)?

证书要素可以用XML,但是比XML存储更多的信息,叫ASN(Abstract Syntax Notation)或者ASN.1(version 1)。

ASN描述了元素间怎么组织嵌套在一起。官方的类似于C语言结构。

证书格式是ITU(Iternational Telecommunication Union)在一些列文档定义(X Series,http://www.itu.int/rec/T-REC-X/en).X系列格式都有一些X.nnn,所以证书也叫X.509

X.509经历3个版本,当前用于描述证书格式也叫X.509v3

一本证书的ASN.1描述

Version: 默认0,就是版本号1,1:版本号2
SerialNumber:可能不是全局唯一,但是象一些大CA或者同一家CA机构,比如(VeriSign从来没有重用序列号)
Sigature: 私钥签发公钥这种是自签发证书。签名算法定于结构:
AlgorithmIdentifier  ::   SEQUENCE {
       algorithm    OBJECT IDENTIFIER,
       parameters   ANY DEFINED BY algorithm OPTJONAL
}
OID(object identifier): byte arrays  mapping byte arrays and their meanings。OID并不是用十六进制,而是用一串数字表示:MD5 with RSA 1.2.840.113549.1.1.4。
ISO/member-body/usa/rsadsi/pkcs/pkcs1/md5. 1.1.4
hash: MD5 or SHA,   私钥签名:RSA, DSS。 除了MD5没有和DSS组合,所以有三种组合。ECDSA:TLS1.2开始支持ECC。
issuer:CN=/OU=/O=/L=/ST=/C=    Common Name, Organizational Unit, Organization, Locality, State, Country
validity:有效期 
Validity :: = SEQUENCE {
        notBefore Time,
        notAfter Time
}
Time :: = CHOICE {
        utcTime UTCTime,
        generalTime   GeneralizedTime
}
subjcet:证书所有者。包含用户信息。1CN,类似于ISSUER,CN可以是泛域名:但是这样安全吗,比如*.com. Null Prefix Attacks Against SSL Certificates. *\0.badguy.com. DC fileed

subjectPublicKeyInfo: 公钥本身。在客户端使用了Issuer,validity perior,subject,就可以信任获取subjectPublicKkeyInofo
RSA
RSAPublicKey ::= SEQUENCE {
     modulus      INTERGER,  --n
     publicExponent    INTERGER, --e
}
DHPublicKey :: = INTERGER --public key,   y=g^x mod p

SUBGROUP ATTACK:

extensions:
Extensions ::= SEQUENCE SIZE(1..MAX) OF Extension
Extension :: = SEQUENCE {
      extnID     OBJECT IDENTIFIER
      critical       BOOLEAN DEFAULT FALSE//如果该extension没带,且critical为0,则拒绝证书
      extnValue      OCTET STRING
}
Subject Alternative Name extension

signature: hash+private key encoding,  CA证书链总有一个根证书是自签证书。公钥签名就是正常的业务证书。
TBS(To be signed)
Extension:Key Usage

1.2 DER(Distinguished Encoding Rules, 传输用)

因为是二进制数据格式,存储比较难,另一种BER(Basic Encoding Rules)

TLV(Type Length Value)除了bit-string没有边界,sequence,sets。那么如果length>127呢,这里使用length of length表示

TAG NUMBER NUMBER OF LENGTH BYTES ACTUAL LENGTH VALUE BITS OF PADDING VALUE

03 83 02 00 00 00 (512 bytes of value)

Sequences and Sets

Tag 0x30

Tag 0x31

1.3 PEM(Privacy Enhanced Mail, Base64 of DER with header and footer),

PKCS#8 更通用性的算法(高于RSA的抽象体)

三、管理证书

3.1 私钥存储

私钥存储需要和公钥一起,这个叫PKCS#12

3.2 CRL(Certificate revocation lists, CRLs,,证书吊销列表):

CRL维护了一些已经废弃的证书。用户隔段时间就去下载CRL列表。(大吗,Verisign的维护了超过3600本,128K的吊销列表)。实际上私钥泄露比证书过期更危险,客户可能使用过期的证书不会有安全风险。但是使用了私钥被蟹肉的证书,就有风险。所以这个CRL列表是包含过期的证书。为了做到CRL不会无限膨胀增大,CA发布CRL可以采用差分方式,只分发最新的吊销CRL。何时触发下载CRL,这个CRL下载地址放在证书的extention域。

3.3 OSCP(Online Certificate Status Protocol)

提供证书是否有效的查询,根据序列号ID向在线服务器查询,而不用下载CRL列表

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SSL证书的区别和申请办法

    从2017年开始意味着浏览器迁移HTTPS的重要开始,因为Chrome 56版本讲HTTP标记为非安全的网站。证书是用于SSL安全通信信道鉴权,它...

    mariolu
  • nginx event框架总结

    Nginx 的 event(事件)处理机制是nginx的核心功能。nginx抽象了event机制,在多个平台有不同的event调用实现方法。比如说经...

    mariolu
  • 我是怎么一步步用go找出压测性能瓶颈

    笔者要在线上服务器load日志并且重放来测一些机器性能指标。模拟机器资源比较少,相对的被模拟的线上机器日志量大,假设线上单机qps有1w,那么5台机器组成的集群...

    mariolu
  • 什么是SSL预证书?

    预验证是用作证书透明度(CT)一部分的特殊类型的SSL证书。 预先证书与常规SSL证书不同,因为它们不是(也不可以)用于验证服务器或形成经过身份验证的连接(例如...

    FB客服
  • Exchange Server 2013多域名证书申请

    继上面几篇完成了Exchange 2013的部署和配置之后,下面需要为Exchange 2013申请一个多域名的证书,用来OWA访问和自动发现等功能。

    李珣
  • HTTPS 证书有效期被提议缩短至13个月

    由 Web 浏览器制造商、软件开发人员和安全证书颁发机构组成的行业团体 CA/Browser Forum,正在考虑将 HTTPS 证书的有效期从 27 个月缩短...

    Debian社区
  • 替换VCenter6.0自签名证书

         很多时候Vcenter需要把自签名的证书替换掉,使用公有证书或者自己搭建的证书服务器进行替换,本实验是使用Windows Server搭建的证书服务器...

    月缺
  • 根证书和中间证书的区别

    让我们花几分钟时间讨论一下中间证书和根CA证书。SSL(或者更准确地说,TLS)是一项大多数终端用户知之甚少甚至一无所知的技术。即使是获取了SSL证书的人通常也...

    SSL China
  • 证书功能来了,打造员工专属荣誉墙!

    每周总有一天,乐乐想和你们唠唠嗑 ? 那个啥,屏幕前的朋友们,你们听过“酿材师”吗? 第一次听到这个名字我的感受是——酿酒师?调酒师?专门酿造食材的师傅? ?...

    腾讯乐享
  • 商业证书颁发机构与自签名SSL证书之间的比较

    无论是公共网站,Intranet流量还是Web应用程序的登台服务器,您都需要一个证书来保护您的数据并满足用户的安全需求。

    一步

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动