前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入了解SSL证书的要素和管理

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

原创
作者头像
mariolu
修改2019-05-17 13:33:43
2.4K0
修改2019-05-17 13:33:43
举报

一、证书需要哪些要素?

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、证书要素
图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描述

代码语言:javascript
复制
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列表

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、证书需要哪些要素?
    • 1.1. 证书的拥有者
      • 1.1.1 问题1:能注册 *.com吗?
      • 1.1.2 问题2: *\0.badguy.com注册证书有问题吗。
    • 1.2. 证书的签发者
      • 1.2.1 信任链:
      • 1.2.2 防止信任链扩散的问题
      • 1.2.3 CA: 自签证书(局域网内的CA)
    • 1.3. 有效期
      • 1.4. 公钥(subjectPublicKeyInfo)
      • 二、证书的编码格式
        • 2.1、什么是ASN.1编码(X.509 v3)?
          • 1.2 DER(Distinguished Encoding Rules, 传输用)
            • 1.3 PEM(Privacy Enhanced Mail, Base64 of DER with header and footer),
            • 三、管理证书
              • 3.1 私钥存储
                • 3.2 CRL(Certificate revocation lists, CRLs,,证书吊销列表):
                  • 3.3 OSCP(Online Certificate Status Protocol)
                  相关产品与服务
                  多因子身份认证
                  多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档