文章目录
1. 什么是CA
Certificate Authority,简称CA,是数字证书认证中心的简称,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
CA的作用是检查证书持有者身份的合法性,并签发证书(在证书上签字),以防证书被伪造或篡改,以及对证书和密钥进行管理,比如签发和撤销证书。
2. 数字证书能做什么
数字证书的内容主要包括:CA机构的信息(即证书的颁布者)、公钥用户信息(证书主题(即证书使用者))、公钥、CA机构的签名和有效期等等。目前,证书的格式和验证方法普遍遵循X.509 国际标准。
CA为每个公钥用户颁布一个数字证书,数字证书的作用是证明证书中列出的主题用户合法拥有证书中列出的公钥。CA机构的数字签名使得攻击者不能伪造和篡改证书。
CA 也拥有一个根私钥和与之配对的根公钥证书。网上的公众用户通过验证 CA 的签名从而信任CA ,任何人都可以得到 CA 的公钥证书,用以验证它所签发的证书。
如果一个用户想鉴别另一个证书的真伪,他就用 CA 的公钥对那个证书上的签名进行验证,一旦验证通过,该证书就被认为是有效的。
由公钥加密的信息只能由与之相对应的私钥解密。为确保只有某个人才能阅读自己的信件,发送者要用收件人的公钥加密信件;收件人便可用自己的私钥解密信件。同样,为证实发件人的身份,发送者要用自己的私钥对信件进行签名;收件人可使用发送者的公钥对签名进行验证,以确认发送者的身份。
如果用户想得到一份属于自己的证书,应先向 CA 提出申请(CSR)。在判明申请者的身份后,CA便为他分配一个公钥,并且将该公钥与申请者的身份信息绑在一起,并为之签名后,便形成证书发送给申请者。
3. 非对称密钥运算原理
非对称密钥运算包含私钥操作和公钥操作:
公钥加密:
C
=
P
e
m
o
d
n
C=P^e mod n
C=Pemodn
私钥解密:
P
=
C
d
m
o
d
n
P=C^d mod n
P=Cdmodn
私钥签名:
C
=
P
d
m
o
d
n
C=P^d mod n
C=Pdmodn
各参赛含义如下:
P
P
P:原文数据
C
C
C: 密文数据
n:RSA合数模
e:RSA的公开幂
d:RSA的私有幂
RSA公钥加密:
对原文数据填充、封装,得到
P
P
P
对
P
P
P做大数运算:
C
=
P
e
m
o
d
n
C=P^e mod n
C=Pemodn
用途:用于非对称传输信息,比如Bob有一个信息想传给Alice,需使用Alice的公钥加密信息并传给Alice,Alice得到加密信息后使用自己的私钥即可解开读取信息。他人即使截获加密信息也无法解开,利用了大数分解难题。
RSA私钥解密:
对密文数据大数运算:
P
=
C
d
m
o
d
n
P=C^d mod n
P=Cdmodn
再对
P
P
P 去填充
RSA私钥签名:
对原文数据做hash计算,得到
P
P
P
再对
P
P
P做大数运算:
C
=
P
d
m
o
d
n
C=P^d mod n
C=Pdmodn
以上可以看出,私钥解密和签名的运算过程基本一致!
大数分解难题
RSA算法中的mod计算问题
RSA密文算法公式
c
=
m
e
m
o
d
n
c=m^e mod n
c=memodn, 例如设m=15, e=3, d=7, p=3, q=11,n=33 , 那么密文计算结果就是
c
=
1
5
3
m
o
d
33
=
9
c=15^3 mod 33 = 9
c=153mod33=9 , e由于取值比较小,取次方时勉强还能手写算出, 如果e取值很大时,比如取值27,
15^27 mod 33 = ? 这样在计算时就很困难。解题思路如下:
15 ^ 27(mod 33)=15 * 15^26( mod 33) = 15*(15^2) ^13(mod 33)=15 * 27^13(mod 33)=15 * 27 * 27^12(mod 33)=9*(27^4) ^3(mod 33)=9*9^3(mod 33)=9^4(mod 33)=27(mod 33)
简言之就是把乘方分开处理。
4. PKCS系列标准
PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准。包含证书申请、更新、证书撤销CRL、DS等,常用的有:PKCS#1、PKCS#7 、PKCS#10 、PKCS#12等。
4.1 PKCS#1
PKCS#1定义了RSA公私钥数据表达形式,及加密、解密、签名、验签、填充过程,定义了数字签名如何计算,包括签名数据和签名本身的格式。
PKCS#1 主要用于组织PKCS#7中所描述的数字签名和数字信封。
RSAPublicKey就是一个RSA公钥。RSA公钥有两个INTEGER型变量:modulus和publicExponent。
RSA公钥结构如下:
RSAPublicKey :: = SEQUENCE{
modulus INTEGER, ------ n(RSA合数模)
publicExponent INTEGER ------ e (RSA公开幂,3~n-1范围内的正整数)
}
与之对应的RSA私钥结构:
RSAPrivateKey :: = SEQUENCE{
version Version,(版本号,如果使用多素数,版本号为1)
modulus INTEGER, ------ n(RSA合数模)
publicExponent INTEGER, ------ e(RSA的公开幂)
privateExponent INTEGER, ------ d(RSA的私有幂)
prime1 INTEGER, ------ p(n的素数因子p)
prime2 INTEGER, ------ q(n的素数因子q)
exponent1 INTEGER, ------ d mod (p -1)
exponent2 INTEGER, ------ d mod (q -1)
coefficient INTEGER, ------- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos ------ OPTIONAL(当version为0时,不存在;当 version为1时,必须有)
}
4.2 PKCS#7
PKCS#7,又称作加密消息语法标准,是RSA实验室制定的交换消息的一种标准, 包含数字签名和数字信封。
ASN.1, 抽象语法标识,是与平台、语言无关的数据结构定义语法。
PKCS#7的ASN.1结构如下:
ContentInfo ::= SEQUENCE {
contentType ContentType,
content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL
}
类型解释:
ContentType ::= OBJECT IDENTIFIER
ContentType标识了content的类型,经过ASN.1编码的类型是OBJECT IDENTIFIER,可用唯一的整数串表示,比如 SignedData 的OBJECT IDENTIFIER为"1.2.840.113549.1.7.2"。
6种content类型分别为:data, signedData, envelopedData, signedAndEnvelopedData, digestData 和encryptedData。
PKCS#7结构如下:
typedef struct pkcs7_st
{
/* 其他项 */
ASN1_OBJECT *type;
union
{
char *ptr;
/* NID_pkcs7_data */
ASN1_OCTET_STRING *data;
/* NID_pkcs7_signed */
PKCS7_SIGNED *signedData;
/* NID_pkcs7_enveloped */
PKCS7_ENVELOPE *envelopedData;
/* NID_pkcs7_signedAndEnveloped */
PKCS7_SIGN_ENVELOPE *signedAndEnvelopedData;
/* NID_pkcs7_digest */
PKCS7_DIGEST *digestedData;
/* NID_pkcs7_encrypted */
PKCS7_ENCRYPT *encryptedData;
/* Anything else */
ASN1_TYPE *other;
} d;
} PKCS7;
6种类型的数据含义如下:
data: 任意数据,由应用解析,可以是明文数据。
signedData: 签名数据
envelopedData: 加密数据
signedAndEnvelopedData: 签名又加密数据,数字信封
digestedData: 摘要数据,原文及摘要结果
encryptedData: 只有加密数据,密钥在带外传送、管理
4.2 .1 SignedData的结构分析
SignedData ::= SEQUENCE {
version Version,
digestAlgorithms DigestAlgorithmIdentifiers,
contentInfo ContentInfo,
certificates [0] IMPLICIT ExtendedCertificatesAndCertificates OPTIONAL,
crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
signerInfos SignerInfos
}
具体项分析:
version Version
Version代表版本类型,Integer, 一般设为1;
**DigestAlgorithmIdentifiers** ::= SET OF DigestAlgorithmIdentifier
DigestAlgorithmIdentifiers是SET结构,分别对应了多个Signers的摘要算法标识符及必要参数。
ContentInfo是签名的内容。
certificates是X.509证书格式的证书。满足从根证书或者上层证书到签名者证书的链式结构。
crls是CRL列表的集合。
signerInfos是每个签名者信息的集合。SignerInfo的结构如下:
SignerInfo ::= SEQUENCE {
version Version,
issuerAndSerialNumber IssuerAndSerialNumber,
digestAlgorithm DigestAlgorithmIdentifier,
authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
encryptedDigest EncryptedDigest,
unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
}
Version代表版本类型,Integer, 一般设为1;
issuerAndSerialNumber指定了签名者用来签名的数字证书,其中包括签名者的唯一别名和特定的证书序列号。
digestAlgorithm 标识对消息进行摘要的算法和必要的参数。
authenticatedAttributes 是被签名者签名或者认证过的属性集合。
digestEncryptionAlgorithm 标识摘要加密的算法和相关的参数等。
encryptedDigest 签名者的私钥签名摘要后的结果值。
4.2 .2 envelopedData的结构
envelopedData 的构建过程分以下几步:
- 随机产生一个特定算法的对称密钥
- 用接收者的公钥加密对称密钥
- 将对称密钥密文和接收者的其他信息放入RecipientInfo值中
- 用对称密钥加密内容
- 将接收者的RecipientInfo和加密内容一并放入EnvelopedData中
ASN.1类型的EnvelopedData:
EnvelopedData::= SEQUENCE {
version Version, //版本号
recipientInfos RecipientInfos, //接受者信息
encryptedContentInfo EncryptedContentInfo //加密后的内容信息
}
接受者集合:
RecipientInfos::= SET OF RecipientInfo
和加密后的内容信息:
EncryptedContentInfo::= SEQUENCE {
contentType ContentType, //内容类型
contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
}
ContentEncryptionAlgorithmIdentifier 加密算法标识。
EncryptedContent::= OCTET STRING
RecipientInfo
RecipientInfo::= SEQUENCE {
version Version, //版本号
issuerAndSerialNumber IssuerAndSerialNumber,
keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
encryptedKey EncryptedKey
}
issuerAndSerialNumber 指定由颁发者别名和颁发序列号确定的接收者证书。
KeyEncryptionAlgorithmIdentifier
指定用接收者公钥加密对称密钥的加密算法和相应参数
encryptedKey 是对称密钥被接收者公钥加密后的结果
4.3 数字信封
假设
A:发送方;B:接收方;SK:私钥;PK:公钥
那么数字信封流程如下:
-
A对明文进行hash运算,得到摘要
-
A用自己的私钥A:SK对摘要进行RSA加密运算,得到A的数字签名
-
A随即产生一个对称密钥,并用该密钥对明文进行对称加密,形成密文
-
A使用B的公钥B:PK对随机产生的对称密钥进行RSA公钥加密,并将结果与密文一同传送给B
-
B用自己的私钥B:SK对对密文进行RSA私钥解密运算,得到A随机产生的对称密钥
-
B用对称密钥对密文解密,得到明文
-
B用A的公钥A:PK对A的数字签名进行RSA公钥解密运算,得到A的信息摘要hash1
-
B用相同的hash算法对明文进行hash运算,得到新的摘要,并与hash1比较,一致说明 明文来自A且未被篡改。
附:数字信封示意图
构造数字信封应该包含:
RSA公钥加密后的对称密钥
对称密钥加密明文后的密文cryptodata
RSA私钥加密的签名值signdata
CA证书
4.4 PKCS#10
4.4.1 证书请求过程
PKCS#10定义了证书请求格式。生成x509数字证书前,用户先提交证书申请文件CSR,然后CA来签发证书。大致过程如下:
- 申请用户自己生成密钥对;构造符合PKCS10标准的证书申请文件CSR,其包含用户信息、公钥等,并用私钥签名(即自签名证书);
- 将证书申请通过SCEP协议(简单证书颁发协议,工作在HTTP之上), 提交给CA;
- CA验证申请者的合法性,满足条件就会产生一个合法的证书X.509v3,内容包括身份信息、公钥、CA信息、CA签名、有效时间、序列号、CRL表(证书废止列表, 检查用户证书是否作废)的下载地址或查询地址。
- CA使用申请者的公钥将X.509v3加密得到密文格式证书,使用SCEP协议颁发给申请者。
- 申请者使用自己的私钥解密得到X.509v3证书并保存。
4.4.2 证书验证过程
拆封证书
目的:获取证书中的公钥
验证证书链
目的:验证签发用户实体证书的CA是否是权威可信的CA
操作:使用每级CA的公钥验证每级数字签名
验证序列号
目的:检查实体证书中的签名实体序列号是否与签发者证书的序列号相一致
操作:用户实体证书中的Authority Key Identifier扩展项Cert Serial Number,即签发证书的序列号与CA证书中的Certificate Serial Number 证书序列号是否一致
证书废止列表查询(黑名单查询,CRL)
目的:检查用户证书是否作废
5. X.509证书简介
在X.509系统中,证书申请者通过发起“证书签名请求(CSR)”来得到一份被签名的证书。为此,它需要生成一个密钥对,然后用其中的私钥对CSR签名(私钥本身要妥善保存,对外保密),CSR包含申请人的身份信息、用于验证CSR的申请人的公钥,以及所请求证书的专有名称(DN),还可能带有CA要求的其它有关身份证明的信息,然后CA对这个CSR发布一份证书,并绑定一个公钥。
组织机构可以把受信的根证书分发给所有的成员,这样就可以使用公司的PKI系统了。像Firefox, IE, Opera, Safari 以及Google Chrome这些浏览器都预装了一组CA根证书,所以可以直接使用这些主流CA发布的SSL证书。浏览器的开发者直接影响它的用户对第三方的信任。FireFox就提供了一份csv/html格式的列表。
X.509还包括证书吊销列表(CRL)实现标准。通过访问CRL,可查看被CA撤销的无效的证书列表。联机证书状态协议(OCSP)是证书吊销列表(CRL)的替代方案。与CRL类似,OCSP允许请求方(如web浏览器)确定证书的吊销状态。
当CA签署证书时,它们通常会在证书中包含OCSP服务器地址。这在功能上与用于CRL的crlDistributionPoints相似。
例如,当服务器向web浏览器提供了证书,浏览器将向证书中指定的OCSP服务器地址发送查询,OCSP响应者在此地址侦听查询,并以证书的吊销状态做出响应。
注:建议在可能的情况下使用OCSP,实际上您只需要OCSP来获得网站证书,因为一些web浏览器已不再支持CRL。
一个完整的数字证书的结构如下:
struct x509_st
{
X509_CINF *cert_info;
X509_ALGOR *sig_alg;
ASN1_BIT_STRING *signature;
int valid;
int references;
char *name;
CRYPTO_EX_DATA ex_data;
long ex_pathlen;
long ex_pcpathlen;
unsigned long ex_flags;
unsigned long ex_kusage;
unsigned long ex_xkusage;
unsigned long ex_nscert;
ASN1_OCTET_STRING *skid;
struct AUTHORITY_KEYID_st *akid;
X509_POLICY_CACHE *policy_cache;
#ifndef OPENSSL_NO_SHA
unsigned char sha1_hash[SHA_DIGEST_LENGTH];
#endif
X509_CERT_AUX *aux;
};
cert_info:证书主体信息;
sig_alg:签名算法;
signature:签名值,存放CA对该证书采用sig_alg算法签名的结果(验证证书持有者身份时,使用该CA公钥对该证书采用sig_alg签名算法签名得到signature1,将两个签名值比较,若相等,则表明是通过CA确认的证书持有者);
valid:是否是合法证书,1 为合法,0 为未知;
references:引用次数,被引用一次则加一;
name:证书持有者信息该内容
X.509证书是用ASN.1(Abstract Syntax Notation One:抽象语法标记)来描述其数据结构,并使用ASN1语法进行编码。
X.509 v3的主要项有:
● Certificate 证书
● Version Number版本号
● Serial Number序列号
● ID Signature Algorithm ID签名算法
● Issuer 证书颁发者
- C
- OU
- O组织
- L地点
- S州
● Validity period 有效期
- Not before起始日期
- Not after截至日期
● Subject 主题(证书使用者)
- C
- OU
- O组织
- L地点
- S州
- CN
● Subject pbulic Key Info 主题公钥信息
- Public Key Algorithm公钥算法
- Public-Key主题公钥
● Extensions (optional) 证书的扩展项(可选)
- Authority Key Identifier (optional)颁发者唯一标识符(可选)
- Subject Key Identifier (optional)主题唯一标识符(可选)
…
● Sigature Algorithm证书签名算法
● Signature证书签名
看一份完整的x509.v3的证书示例:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 4096 (0x1000)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, ST=Beijing, O=Milanac007 Ltd, OU=Milanac007 Ltd Certificate Authority, CN=Milanac007 Ltd Intermediate CA
Validity
Not Before: Jan 29 09:55:30 2021 GMT
Not After : Feb 8 09:55:30 2022 GMT
Subject: C=CN, ST=Beijing, L=Beijing, O=Milanac007 Ltd, OU=Milanac007 Ltd Web Services, CN=www.example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:a9:63:8f:dc:f0:f4:9e:b2:36:9a:3f:13:48:6a:
b0:1a:be:8f:bc:e1:33:c1:9d:47:77:f6:a0:ed:52:
...
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Server
Netscape Comment:
OpenSSL Generated Server Certificate
X509v3 Subject Key Identifier:
10:74:40:70:05:FE:03:0E:3D:4F:61:82:47:59:4E:82:25:0C:07:BF
X509v3 Authority Key Identifier:
keyid:98:B3:14:F8:D5:65:11:2D:FB:C1:28:31:14:0F:23:A4:A3:E8:AF:43
DirName:/C=CN/ST=Beijing/L=Beijing/O=Milanac007 Ltd/OU=Milanac007 Ltd Certificate Authority/CN=Ltd Root CA
serial:10:00
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication
Signature Algorithm: sha256WithRSAEncryption
38:ab:fb:22:eb:4d:62:74:1e:1e:dd:a0:9a:34:9a:af:4e:71:
99:7f:cb:51:b3:7f:83:bb:52:18:74:c0:a0:8f:32:6b:1d:70:
...
5.1 证书文件扩展名
X.509证书有几种常用的文件扩展名,比如:
- .der文件一般是二进制DER编码;
- .pem文件是DER编码再进行Base64编码的证书;
- cer,.crt 既有DER编码 又有 DER编码再进行Base64编码;.crt是微软的证书后缀名;
- .p7b,.p7c-PKC#7:SignedData结构,没有数据,仅有证书或CRL;
- .pfx :Personal Information Exchange,PKCS#12的前身;
- .p12-PKCS#12:可以包含证书(公钥),也可同时包含受密码保护的私钥。使用openssl、keytool、Portecle(KeyStore工具)都可以很方便生成PFX证书。
现在PEM文件证书很常见。
PEM, Privacy Enhanced Mail: 安全增强邮件,通过加密算法、证书加密邮件。是DER编码的证书再进行Base64编码。这是一种文件格式,它使用一个头、尾标识文件的内容,PEM格式的证书数据存放于“— BEGIN CERTIFICATE —”和“ — END CERTIFICATE —”之间,以方便解析。
.pem为内容使用BASE64编码且带头带尾的特定格式,二进制的文件不应该命名为pem。
举例:
PEM格式的被加密的私钥:
-----BEGIN ENCRYPTED PRIVATE KEY-----
...
-----END ENCRYPTED PRIVATE KEY-----
PEM格式的证书:
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
PEM格式的PKCS#10证书请求:
-----BEGIN CERTIFICATE REQUEST-----
...
-----END CERTIFICATE REQUEST-----
5.2 证书链和交叉认证
5.2.1 证书链
证书链,即证书路径,是以最终实体证书开头,后跟一个或多个CA证书,且通常最后一个是自签名证书,具有如下关系:
-
除了链上的最后一个证书外,每个证书的颁发者等于其后一个证书的主题(主题就是使用者)。
-
除了链上的最后一个证书外,每个证书都是由其后的一个证书签名。
-
最后一个证书是信任锚:由于是通过某种可信过程得到的,所以可以信任它。
证书链用来检查目标证书(链中的第一个证书)中包含的公钥和其他数据是否属于其主题(即使用者)。检查是这么做的:用证书链中的下一个证书的公钥来验证上一个证书的签名,一直检查到证书链的尾端,由于最后一个证书是信任锚,成功达到该证书即可证明目标证书可以信任。
当然上述认证过程是经过简化的,实际上涉及额外的检查,例如验证证书的有效日期、查找CRL等。
5.2.2 交叉认证
一份证书可以是不同的证书链的一部分, 因为相同的主题和公钥可生成多个CA证书,它们使用不同的私钥(来自不同的CA或来自同一CA的不同的私钥)进行签名。 因此,尽管单个X.509证书只能具有一个颁发者和一个CA签名,但是它可以有效地链接到多个证书,从而建立完全不同的证书链。 这对于PKI与其他应用程序之间的交叉认证至关重要,详见以下示例。
下图每个框代表一个证书,主题以粗体显示,A→B表示“ A由B签名”(或更准确地说,A由B包含公钥相对应的私钥签名),具有相同颜色(非白色/透明)的证书包含相同的公钥。
例1:两个PKI之间,在根证书颁发机构(CA)级别上进行交叉认证
为了让PKI 2的用户证书也得到PKI 1的信任,CA1签署包含CA2公钥的证书cert2.1,此时cert2和cert2.1具体相同的主题及公钥,cert2.2 (User 2)就有了两条合法的证书链:“cert2.2 → cert2” and “cert2.2 → cert2.1 → cert1”。
CA2也可以生成类似的包含有CA1公钥的证书cert1.1,以便PKI 1的用户(比如User 1)的证书能在PKI 2得到认证。
例2:CA证书更新
证书颁发者为了从旧的私钥平滑地转移到新的私钥,他可以颁发两个证书,其中一个是新的私钥对旧的公钥进行签名,另一个是旧的私钥对新的公钥的签名,这两个证书都是自颁发的,但都不是自签名。注:另外还存在新旧两个自签名证书。
假设cert1和cert3包含相同的公钥(旧的公钥),对于cert5来说有两条合法的证书链,cert5 → cert1 和 cert5 → cert3 → cert2, cert6的情况也类似。这样就允许老的用户证书可以在新旧两个根证书之间平滑转移。
5.3 申请、签发X.509证书的例子
5.3.1 最终实体证书
最终实体证书就是大家通常说的用户证书,有别于CA证书。最终实体与CA是两个相对的概念:CA可以利用其私钥签发证书,而最终实体不能。最终实体可以是各种类型的实体,如自然人、组织机构、设备、Web服务器等。
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
10:e6:fc:62:b7:41:8a:d5:00:5e:45:b6
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=BE, O=GlobalSign nv-sa, CN=GlobalSign Organization Validation CA - SHA256 - G2
Validity
Not Before: Nov 21 08:00:00 2016 GMT
Not After : Nov 22 07:59:59 2017 GMT
Subject: C=US, ST=California, L=San Francisco, O=Wikimedia Foundation, Inc., CN=*.wikipedia.org
Subject Public Key Info:
...
OCSP - URI:http://ocsp2.globalsign.com/gsorganizationvalsha2g2
X509v3 Subject Key Identifier:
28:2A:26:2A:57:8B:3B:CE:B4:D6:AB:54:EF:D7:38:21:2C:49:5C:36
X509v3 Authority Key Identifier:
keyid:96:DE:61:F1:BD:1C:16:29:53:1C:C0:CC:7D:3B:83:00:40:E6:1A:7C
Signature Algorithm: sha256WithRSAEncryption
8b:c3:ed:d1:9d:39:6f:af:40:72:bd:1e:18:5e:30:54:23:35:
...
要验证此最终实体证书,需要一个与其颁发者和颁发机构密钥标识符(Authority Key Identifier)匹配的中间证书:
Issuer: C=BE, O=GlobalSign nv-sa, CN=GlobalSign Organization Validation CA - SHA256 - G2
X509v3 Authority Key Identifier:
keyid:96:DE:61:F1:BD:1C:16:29:53:1C:C0:CC:7D:3B:83:00:40:E6:1A:7C
5.3.2 中间证书
我们使用中间证书作为代理,因为我们必须将根证书保存在众多安全层之后,以确保其密钥绝对不可访问。由于根证书签署了中间证书,因此中间证书可用于签署客户安装和维护的SSL“信任链”。
注意:如果不使用已颁发的SSL证书安装中间证书,则可能无法建立可信链证书。这意味着,当访问者试图访问您的网站时,他们可能会收到一个“安全警报”错误,指示“安全证书是由您未选择信任的公司颁发的…”面对这样的警告,潜在客户很可能会将其业务转移到其他地方。
以下是中间证书的实例,此证书被CA根证书签署,并签署了上面的最终实体证书。
注意:此中间证书的subject字段与它所签署的最终实体证书的issuer字段相同、中间证书的subject key identifier(主题密钥标识符)字段与最终实体证书的的authority key identifier(颁发者的密钥标识符)字段相同。
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
04:00:00:00:00:01:44:4e:f0:42:47
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
Validity
Not Before: Feb 20 10:00:00 2014 GMT
Not After : Feb 20 10:00:00 2024 GMT
Subject: C=BE, O=GlobalSign nv-sa, CN=GlobalSign Organization Validation CA - SHA256 - G2
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:c7:0e:6c:3f:23:93:7f:cc:70:a5:9d:20:c3:0e:
...
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Key Usage: critical
Certificate Sign, CRL Sign
X509v3 Basic Constraints: critical
CA:TRUE, pathlen:0
X509v3 Subject Key Identifier:
96:DE:61:F1:BD:1C:16:29:53:1C:C0:CC:7D:3B:83:00:40:E6:1A:7C
X509v3 Certificate Policies:
Policy: X509v3 Any Policy
CPS: https://www.globalsign.com/repository/
X509v3 CRL Distribution Points:
Full Name:
URI:http://crl.globalsign.net/root.crl
Authority Information Access:
OCSP - URI:http://ocsp.globalsign.com/rootr1
X509v3 Authority Key Identifier:
keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B
Signature Algorithm: sha256WithRSAEncryption
46:2a:ee:5e:bd:ae:01:60:37:31:11:86:71:74:b6:46:49:c8:
...
5.3.3 根证书
以下是证书颁发机构(CA)的自签名根证书示例。Issuer(颁发者字段)和Subject(主题,使用者字段)是相同的,能够使用自己的公钥对签名进行验证,信任链的验证必须在此结束。如果验证程序在其信任存储中有此根证书,就可以认为在TLS连接中使用的最终实体证书是可信的。否则,最终实体证书被视为不可信。
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
04:00:00:00:00:01:15:4b:5a:c3:94
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
Validity
Not Before: Sep 1 12:00:00 1998 GMT
Not After : Jan 28 12:00:00 2028 GMT
Subject: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:da:0e:e6:99:8d:ce:a3:e3:4f:8a:7e:fb:f1:8b:
...
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Key Usage: critical
Certificate Sign, CRL Sign
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Subject Key Identifier:
60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B
Signature Algorithm: sha1WithRSAEncryption
d6:73:e7:7c:4f:76:d0:8d:bf:ec:ba:a2:be:34:c5:28:32:b5:
6. OpenSSL证书颁发机构demo
OpenSSL项目是一项旨在协作开发安全套接字层(SSL v2 / v3)和传输层安全性(TLS v1)协议以及完整的强通用密码库 的功能强大的商业级的功能齐全的开源工具包的项目。
SSL是Netscape开发的专门保护用户Web通讯的安全套接字层协议,目前版本为3.0。而最新版本的TLS 1.0是IETF(工程任务组)制定的一种新的协议,建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。两者差别极小,可以理解为SSL 3.1。
但在TLS与SSL3.0之间还是存在着差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操作。
本指南演示如何使用OpenSSL命令行工具充当您自己的证书颁发机构(CA)。这在许多情况下都很有用,例如颁发服务器证书以保护intranet网站,或向客户端颁发证书以允许客户端向服务器进行身份验证。
openssl签发证书步骤:
目录: /Users/apple/ca_demo/root/ca
所有密码:123456
6-2-1)准备目录
mkdir root
mkdir root/ca
cd root/ca/
mkdir certs crl newcerts private
chmod 700 private/
touch index.txt
echo 1000 > serial
6-2-2)准备配置文件
touch openssl.cnf #touch 创建空文件
vim openssl.cnf
6-2-3)创建根私钥
apple$ openssl genrsa -aes256 -out private/ca.key.pem 4096
密钥对密码:123456
chmod 400 private/ca.key.pem
6-2-4)创建根证书
req -config openssl.cnf -key private/ca.key.pem -new -x509 -days 7300 -sha256 -extensions v3_ca -out certs/ca.cert.pem
Country Name (2 letter code) [GB]:CN
State or Province Name [England]:Beijing
Locality Name []:Beijing
Organization Name [Alice Ltd]:Milanac007 Ltd
Organizational Unit Name []:Milanac007 Ltd Certificate Authority
Common Name []:Ltd Root CA
Email Address []:
6-2-5)验证根证书
openssl x509 -noout -text -in certs/ca.cert.pem
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 14672616621627129874 (0xcb9f9b141993c012)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, ST=Beijing, L=Beijing, O=Milanac007 Ltd, OU=Milanac007 Ltd Certificate Authority, CN=Ltd Root CA
Validity
Not Before: Jan 29 05:00:09 2021 GMT
Not After : Jan 24 05:00:09 2041 GMT
Subject: C=CN, ST=Beijing, L=Beijing, O=Milanac007 Ltd, OU=Milanac007 Ltd Certificate Authority, CN=Ltd Root CA
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
Modulus:
00:b6:1a:6d:a9:8d:1f:fe:ca:06:91:20:77:ea:f3:
82:d2:cc:f9:27:0c:1c:76:9d:d5:cc:5a:5f:52:46:
38:45:59:53:12:83:3d:40:3a:e7:08:2a:29:72:91:
b6:f2:b4:9d:6b:f2:77:27:09:93:39:8f:4b:53:01:
6f:5d:89:13:c3:f8:0c:39:72:61:0c:6c:83:92:b5:
bf:99:10:9c:a5:9d:1c:5e:23:50:ac:fe:f3:7e:e7:
0f:a6:06:32:db:f7:e0:bf:62:2f:06:84:6e:f8:e8:
e6:f3:09:b9:16:2b:29:d4:12:82:18:18:6b:28:06:
55:d6:8d:25:4b:79:27:80:f6:f7:d9:a8:84:6b:7c:
d8:1c:12:2f:3a:d6:14:9b:a3:c2:0f:9a:58:6d:39:
ee:e5:89:61:37:43:13:46:0c:3d:1a:20:1a:ac:35:
b3:b0:4f:b9:40:ee:b0:0f:5b:f0:63:d7:16:85:2e:
db:79:34:1f:ba:34:aa:65:1f:e8:c4:03:0d:d8:62:
ae:9b:ec:3a:3d:fd:f0:48:61:a3:be:84:55:88:58:
c2:ef:a5:72:08:46:e1:b9:6b:53:bd:70:cc:07:e2:
8b:6d:62:7e:7f:90:80:03:28:04:02:1f:04:db:8d:
2c:24:9b:25:d3:1d:2f:9f:b9:3a:8e:c6:48:50:dc:
b7:a1:c5:19:9d:ea:89:26:23:48:7f:15:6a:81:4a:
ea:ac:de:54:10:13:77:fd:46:a5:a2:4f:56:34:71:
d5:20:e9:13:9f:b6:16:cf:2b:5e:63:9d:4e:3f:31:
90:19:cb:d2:d3:f3:db:7a:60:f0:88:cc:86:db:78:
76:f1:37:9f:8d:e4:f5:2d:44:87:2f:49:7c:85:2c:
b7:b7:e5:4c:08:6b:6f:48:db:06:d6:24:2d:6b:db:
d9:8c:98:41:70:1e:4d:b7:9b:1a:53:cb:b0:6d:14:
66:61:a0:fa:e6:52:03:ae:98:73:3f:94:b7:11:3d:
26:db:73:82:2a:11:b9:34:2d:bd:3e:e0:7f:f2:9c:
f5:c8:cb:65:db:8e:38:d4:ff:30:a5:be:4e:e3:3d:
90:1d:45:70:f4:72:b7:e3:cd:78:67:a1:15:22:a9:
42:7f:3c:cb:ae:4a:7b:61:02:f4:5b:33:91:41:29:
9a:13:10:c0:ab:5c:2f:a7:a8:d5:f2:87:42:df:09:
58:d9:a0:03:51:4e:bc:7e:5c:3d:6f:e4:94:0f:d0:
66:1b:99:0a:18:8a:75:7a:85:b6:c3:d7:22:ef:0a:
eb:e1:80:af:21:5f:7c:93:8e:75:a7:21:2e:31:43:
d9:51:99:c8:2c:8a:ab:2a:ed:99:1d:5e:71:ea:66:
84:b1:5b
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
B0:A4:67:0E:1E:5D:2E:24:FA:F9:FD:17:9B:AA:C4:8C:6B:EA:22:6B
X509v3 Authority Key Identifier:
keyid:B0:A4:67:0E:1E:5D:2E:24:FA:F9:FD:17:9B:AA:C4:8C:6B:EA:22:6B
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Key Usage: critical
Digital Signature, Certificate Sign, CRL Sign
Signature Algorithm: sha256WithRSAEncryption
19:7c:d3:59:e5:0e:a5:28:59:5c:e9:a8:81:1d:7d:43:cd:29:
fb:14:e6:02:de:84:65:43:36:64:09:a6:25:de:30:28:10:b0:
50:75:01:2b:bf:6c:a5:1f:22:fd:0d:ec:71:ab:2d:2c:a4:83:
5c:af:07:53:f3:75:d7:7c:1c:b6:b2:4a:73:1e:99:34:eb:d8:
aa:19:b6:81:57:7d:5a:b8:fb:95:d1:8d:91:a4:ec:b6:4d:39:
4f:b2:fd:4f:31:69:a7:81:ce:83:9e:39:ad:c3:18:fb:11:d6:
50:48:e4:f1:fd:42:e7:a8:ea:42:27:61:38:21:41:3f:c0:ae:
31:0e:3c:7c:0d:18:22:69:1c:52:da:be:5b:63:b4:1a:ce:7f:
4e:13:1d:f5:8a:ca:1a:50:36:ed:26:9a:4c:c9:8e:c2:72:82:
c9:84:21:3d:80:d7:13:64:1f:ce:cc:79:37:5b:3f:2e:42:a6:
fc:a9:95:c5:bf:43:32:d9:81:64:39:ce:3c:e6:f8:81:71:5d:
20:31:02:38:1e:41:ca:45:b4:58:4a:bf:d2:56:7e:ba:98:54:
8d:c8:a4:ff:cc:d1:13:c3:6f:8d:c5:e9:37:c6:57:48:10:26:
b5:3b:08:97:47:a7:4e:31:cc:b3:c7:11:9e:cc:37:0a:8b:8c:
16:a7:29:df:59:f8:a2:73:a2:63:54:01:14:07:76:1e:69:d8:
06:f5:4c:c8:bb:35:1b:72:fb:57:01:ab:49:36:96:ad:76:82:
20:f9:93:0c:ae:6d:0a:67:80:ba:2a:f4:56:f2:fa:22:79:8c:
3f:16:3a:a9:06:61:66:13:b0:3d:8c:8b:c0:df:f7:bf:d1:99:
f4:4a:a0:58:12:ca:0c:c0:16:e7:51:f1:e5:08:5f:ee:19:51:
de:ec:70:56:62:b4:f0:5e:78:79:86:21:c7:a9:b5:19:e6:59:
1c:af:44:4c:d9:9c:26:55:9f:4e:f7:b1:1a:fd:58:e2:c4:5c:
d8:9a:e6:45:0a:9d:dd:9d:4c:95:cd:fd:23:9a:c2:7f:ae:0c:
74:09:c3:88:03:82:4a:6a:01:69:b5:51:ee:6a:e6:85:4d:ec:
31:c7:89:43:35:33:64:52:59:69:b8:36:8f:2d:2e:b7:80:6f:
9f:13:8f:63:7a:d6:4c:30:58:7e:74:b5:e2:38:c3:1c:36:01:
2b:68:90:2c:e9:b8:03:49:f1:c2:60:fc:e1:1b:2d:2c:81:32:
7f:cd:db:84:ef:05:77:ac:63:47:a1:f1:87:72:21:65:e1:b7:
a5:07:e0:47:e4:eb:54:a6:86:f4:8d:58:24:18:28:66:f7:94:
84:8f:b3:78:c8:ed:29:cb
6-3)创建中间证书密钥对
6-3-1)准备目录
根CA文件保存在/ root / ca中,选择其他目录(/root/ca/intermediate)来存储中间CA文件。
mkdir intermediate
cd intermediate/
mkdir certs crl csr newcerts private
chmod 700 private/
touch index.txt
echo 1000 > serial
将crlnumber文件添加到中间CA目录树,crlnumber用于跟踪证书吊销列表:
echo 1000 > crlnumber
从上级目录复制配置文件到这里:
cp ../openssl.cnf .
注意与根CA配置文件相比,以下五个选项变化了:
[ CA_default ]
dir = /Users/apple/ca_demo/root/ca/intermediate
private_key = $dir/private/intermediate.key.pem
certificate = $dir/certs/intermediate.cert.pem
crl = $dir/crl/intermediate.crl.pem
policy = policy_loose
6-3-2) 创建中间密钥
创建中间密钥(intermediate.key.pem),并使用AES 256算法和复杂的强密码将其加密保护。
cd ..
ca apple$ openssl genrsa -aes256 -out intermediate/private/intermediate.key.pem 4096
密钥对密码:123456
chmod 400 intermediate/private/intermediate.key.pem
6-3-3) 创建中间证书
使用中间证书创建证书签名请求(CSR),详细信息通常应与根CA相同。但 Common Name(证书持有者通用名/FQDN)必须不同:
警告:请确保命令行指定的中间 CA 配置文件存在(intermediate/openssl.cnf)。
openssl req -config intermediate/openssl.cnf -key intermediate/private/intermediate.key.pem -new -sha256 -out intermediate/csr/intermediate.csr.pem
密钥对密码:123456
Country Name (2 letter code) [GB]:CN
State or Province Name [England]:Beijing
Locality Name []:Beijing
Organization Name [Alice Ltd]:Milanac007 Ltd
Organizational Unit Name []:Milanac007 Ltd Certificate Authority
Common Name []:Milanac007 Ltd Intermediate CA
Email Address []:
要创建中间证书,请使用带有v3_intermediate_CA扩展项的根CA对中间CSR进行签名。中间证书的有效期应短于根证书。十年是合理的。
警告:指定根CA配置文件 /root/ca/openssl.cnf。
openssl ca -config openssl.cnf -extensions v3_intermediate_ca -days 3650 -notext -md sha256 -in intermediate/csr/intermediate.csr.pem -out intermediate/certs/intermediate.cert.pem
密钥对密码:123456
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 4096 (0x1000)
Validity
Not Before: Jan 29 09:02:08 2021 GMT
Not After : Jan 27 09:02:08 2031 GMT
Subject:
countryName = CN
stateOrProvinceName = Beijing
organizationName = Milanac007 Ltd
organizationalUnitName = Milanac007 Ltd Certificate Authority
commonName = Milanac007 Ltd Intermediate CA
X509v3 extensions:
X509v3 Subject Key Identifier:
98:B3:14:F8:D5:65:11:2D:FB:C1:28:31:14:0F:23:A4:A3:E8:AF:43
X509v3 Authority Key Identifier:
keyid:B0:A4:67:0E:1E:5D:2E:24:FA:F9:FD:17:9B:AA:C4:8C:6B:EA:22:6B
X509v3 Basic Constraints: critical
CA:TRUE, pathlen:0
X509v3 Key Usage: critical
Digital Signature, Certificate Sign, CRL Sign
Certificate is to be certified until Jan 27 09:02:08 2031 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
chmod 444 intermediate/certs/intermediate.cert.pem
# index.txt文件是OpenSSL CA工具存储证书数据库的位置,请勿手动删除或编辑此文件。现在它应该包含刚才创建的中间证书:
V 310127090208Z 1000 unknown /C=CN/ST=Beijing/O=Milanac007 Ltd/OU=Milanac007 Ltd Certificate Authority/CN=Milanac007 Ltd Intermediate CA
6-3-4) 验证中间证书
正如我们对根证书所做的那样,请检查中间证书的详细信息是否正确:
openssl x509 -noout -text -in intermediate/certs/intermediate.cert.pem
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 4096 (0x1000)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, ST=Beijing, L=Beijing, O=Milanac007 Ltd, OU=Milanac007 Ltd Certificate Authority, CN=Ltd Root CA
Validity
Not Before: Jan 29 09:02:08 2021 GMT
Not After : Jan 27 09:02:08 2031 GMT
Subject: C=CN, ST=Beijing, O=Milanac007 Ltd, OU=Milanac007 Ltd Certificate Authority, CN=Milanac007 Ltd Intermediate CA
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
Modulus:
00:cd:6c:17:4b:73:b6:64:b2:c0:f4:88:e1:f7:9e:
7d:b0:8a:5a:59:80:5f:49:a2:b3:ec:67:eb:e4:a1:
37:ee:4d:b1:ca:58:e7:8e:db:0b:74:c5:1f:e1:21:
96:eb:38:15:bb:f5:04:9d:9d:5c:35:49:db:fb:2e:
53:b6:60:a5:6c:ef:e7:26:3c:d7:9b:27:fa:92:d9:
2c:a1:31:11:d3:32:f3:55:ad:ae:4e:19:f9:26:fe:
95:2f:f3:d8:e0:95:b9:9e:4b:57:f8:7a:59:a7:eb:
be:38:41:2d:bb:56:f7:1f:28:39:f5:69:22:fb:c2:
ef:70:55:2c:fa:dd:90:a4:bc:7c:c0:89:c0:e4:95:
bd:f8:3a:15:bf:5e:69:e8:a1:a3:97:c9:51:69:36:
ee:98:de:41:a0:40:f1:d6:56:be:a0:f7:01:c3:81:
fd:25:7a:70:fc:31:ff:8f:a8:44:e2:57:ce:31:75:
93:6d:1b:5b:a1:e3:7c:ec:4c:3a:fa:4b:bd:cd:9b:
69:00:da:f7:2b:48:02:91:fb:6d:da:af:6e:2c:63:
26:40:39:6d:f4:62:95:c5:78:f6:a0:9b:56:22:70:
09:51:72:20:9f:6b:bd:83:b6:4e:66:6e:78:e3:1e:
94:94:9a:fb:e7:1f:ee:bc:2d:c7:31:eb:bd:7d:54:
2b:9f:17:67:5c:f2:57:60:1f:e0:fd:2d:29:2d:36:
f8:a5:f6:a1:eb:df:cc:2e:71:1b:30:4e:f4:21:53:
11:de:16:b3:75:0c:2d:d6:a5:71:42:e9:01:05:71:
1a:ad:57:3b:a2:9f:9b:bd:d8:1e:0a:fb:ae:07:1c:
d1:05:7e:81:c4:23:8c:71:c2:e8:c7:23:14:65:37:
68:6c:01:54:27:c5:13:b2:c0:9f:13:1a:5c:ce:2e:
b7:fd:b0:f5:bc:75:1c:db:09:b5:7a:49:d0:bf:d4:
b8:27:0b:5c:b9:55:d4:b4:f3:a8:2e:08:68:53:e7:
19:fc:e8:f2:fa:81:7b:b5:08:88:6f:c5:75:09:12:
10:11:b3:60:2b:25:0e:5c:28:71:e5:97:ca:57:80:
f6:39:8e:ed:ab:d0:10:13:40:a2:22:3c:10:a8:b0:
55:a0:2c:73:14:c3:0e:1b:12:98:2c:ff:be:93:61:
24:76:72:b8:3d:ec:15:2c:65:f7:ec:e2:83:93:23:
45:be:43:15:58:0a:a4:2d:16:88:4d:d4:d8:44:72:
44:db:99:ed:94:3a:f2:18:b9:b4:26:33:92:42:70:
b9:bc:2f:c0:f6:bc:b2:f8:33:2d:c3:64:2d:c0:e3:
08:8a:96:b9:5a:36:10:05:1c:6e:cf:92:0c:9a:e3:
be:00:1b
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
98:B3:14:F8:D5:65:11:2D:FB:C1:28:31:14:0F:23:A4:A3:E8:AF:43
X509v3 Authority Key Identifier:
keyid:B0:A4:67:0E:1E:5D:2E:24:FA:F9:FD:17:9B:AA:C4:8C:6B:EA:22:6B
X509v3 Basic Constraints: critical
CA:TRUE, pathlen:0
X509v3 Key Usage: critical
Digital Signature, Certificate Sign, CRL Sign
Signature Algorithm: sha256WithRSAEncryption
81:a8:6f:f1:f3:f4:d6:2d:3b:c0:9b:59:b9:c5:8b:8f:97:a7:
be:00:07:ae:9f:8a:fb:ea:aa:0f:95:21:ac:ce:a3:09:52:38:
cc:d3:90:74:01:26:19:a7:da:3f:71:b9:11:55:16:3a:1c:94:
24:12:94:a5:42:f7:41:03:b4:cd:cf:6b:df:1f:94:b7:d0:7a:
00:6e:37:15:fe:bb:06:86:56:20:c5:ac:cc:7b:d2:d3:d6:ab:
54:bb:80:7b:a4:f2:44:5f:9f:f6:db:7c:41:09:00:50:94:d4:
fd:1c:ac:3b:86:0f:9f:2e:77:1e:0d:01:6c:bf:3e:63:8e:91:
cb:22:a4:ad:a3:05:71:91:1d:01:d7:af:2d:25:a3:b5:d0:84:
0f:77:e1:a2:6f:f3:a3:6d:82:e6:12:27:f7:c6:6b:19:e3:ad:
d5:a1:e7:8e:45:5a:59:6e:f3:de:cc:1b:d3:fd:47:ca:2f:77:
0c:ef:72:73:7e:73:a2:bc:64:cf:05:ab:5a:e1:41:d7:78:04:
01:3f:da:cb:d8:17:64:ea:55:9b:56:c2:76:46:df:f6:0a:3d:
32:f7:af:07:f0:14:ad:b5:90:0d:a5:b3:24:72:8a:8e:1e:8b:
fe:a6:4f:9a:f5:ed:63:b3:07:38:2c:3c:e4:48:ad:77:e1:99:
43:77:20:02:b0:1b:1f:ba:2a:75:18:d6:9a:ca:cb:fc:37:f7:
43:c6:95:8a:16:0d:d5:8b:59:14:4f:e1:57:72:c4:50:33:bb:
03:8c:c5:ee:41:45:af:ce:d1:a7:5c:f9:29:fe:ca:69:58:1e:
f9:db:e0:39:7f:33:8e:9e:ff:1a:f2:a1:94:40:33:ed:d9:fb:
83:10:24:47:9e:c5:23:0f:d8:19:15:f6:99:a9:b0:69:55:e7:
f2:19:84:9f:e4:22:ea:b6:cc:ca:48:88:89:4a:dd:50:8a:47:
db:1d:db:4f:f5:6e:a3:02:16:e2:de:8a:34:4e:4c:c5:11:dd:
41:93:e2:c3:01:d6:86:9d:bd:75:67:5e:3e:ab:68:d4:23:f2:
03:a0:bc:93:55:57:38:d8:db:9f:55:09:7e:b7:dc:f6:37:be:
8e:08:ab:b4:42:21:1d:8e:49:95:99:0c:bb:a1:cf:05:9d:b3:
2a:a7:2c:3e:12:c0:e4:c0:03:4e:0c:71:ee:d1:75:50:b2:fc:
52:bf:2f:b5:38:3d:97:80:bf:e9:4f:8f:26:a2:39:5c:fa:c7:
e9:24:ab:14:af:42:11:15:68:a4:7f:cb:66:1c:a2:ec:2c:f7:
9e:01:65:7f:d0:08:7e:7b:e8:de:2f:b0:73:75:9a:0a:58:bd:
ef:cb:39:4c:43:2c:48:65
6-3-5) 创建证书链文件
当应用程序(如web浏览器)尝试验证由中间CA签名的证书时,它必须对照根证书验证中间证书。要完成信任链,请创建CA证书链以呈现给应用程序。
要创建CA证书链,请将中间证书和根证书连接在一起,我们稍后将使用此文件来验证由中间CA签名的证书。
cat intermediate/certs/intermediate.cert.pem certs/ca.cert.pem > intermediate/certs/ca-chain.cert.pem
chmod 444 intermediate/certs/ca-chain.cert.pem
注意:证书链文件必须包含根证书,因为需要让客户端应用程序找到它。更好的选择(尤其是在管理Intranet的情况下)是在需要连接的每个客户端上安装根证书,在这种情况下,证书链文件仅需要包含您的中间证书。
cat intermediate/certs/ca-chain.cert.pem
-----BEGIN CERTIFICATE-----
MIIGAzCCA+ugAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAkNO
MRAwDgYDVQQIDAdCZWlqaW5nMRAwDgYDVQQHDAdCZWlqaW5nMRcwFQYDVQQKDA5N
aWxhbmFjMDA3IEx0ZDEtMCsGA1UECwwkTWlsYW5hYzAwNyBMdGQgQ2VydGlmaWNh
dGUgQXV0aG9yaXR5MRQwEgYDVQQDDAtMdGQgUm9vdCBDQTAeFw0yMTAxMjkwOTAy
MDhaFw0zMTAxMjcwOTAyMDhaMIGQMQswCQYDVQQGEwJDTjEQMA4GA1UECAwHQmVp
amluZzEXMBUGA1UECgwOTWlsYW5hYzAwNyBMdGQxLTArBgNVBAsMJE1pbGFuYWMw
MDcgTHRkIENlcnRpZmljYXRlIEF1dGhvcml0eTEnMCUGA1UEAwweTWlsYW5hYzAw
NyBMdGQgSW50ZXJtZWRpYXRlIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEAzWwXS3O2ZLLA9Ijh9559sIpaWYBfSaKz7Gfr5KE37k2xyljnjtsLdMUf
4SGW6zgVu/UEnZ1cNUnb+y5TtmClbO/nJjzXmyf6ktksoTER0zLzVa2uThn5Jv6V
L/PY4JW5nktX+HpZp+u+OEEtu1b3Hyg59Wki+8LvcFUs+t2QpLx8wInA5JW9+DoV
v15p6KGjl8lRaTbumN5BoEDx1la+oPcBw4H9JXpw/DH/j6hE4lfOMXWTbRtboeN8
7Ew6+ku9zZtpANr3K0gCkftt2q9uLGMmQDlt9GKVxXj2oJtWInAJUXIgn2u9g7ZO
Zm544x6UlJr75x/uvC3HMeu9fVQrnxdnXPJXYB/g/S0pLTb4pfah69/MLnEbME70
IVMR3hazdQwt1qVxQukBBXEarVc7op+bvdgeCvuuBxzRBX6BxCOMccLoxyMUZTdo
bAFUJ8UTssCfExpczi63/bD1vHUc2wm1eknQv9S4JwtcuVXUtPOoLghoU+cZ/Ojy
+oF7tQiIb8V1CRIQEbNgKyUOXChx5ZfKV4D2OY7tq9AQE0CiIjwQqLBVoCxzFMMO
GxKYLP++k2EkdnK4PewVLGX37OKDkyNFvkMVWAqkLRaITdTYRHJE25ntlDryGLm0
JjOSQnC5vC/A9ryy+DMtw2QtwOMIipa5WjYQBRxuz5IMmuO+ABsCAwEAAaNmMGQw
HQYDVR0OBBYEFJizFPjVZREt+8EoMRQPI6Sj6K9DMB8GA1UdIwQYMBaAFLCkZw4e
XS4k+vn9F5uqxIxr6iJrMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQD
AgGGMA0GCSqGSIb3DQEBCwUAA4ICAQCBqG/x8/TWLTvAm1m5xYuPl6e+AAeun4r7
6qoPlSGszqMJUjjM05B0ASYZp9o/cbkRVRY6HJQkEpSlQvdBA7TNz2vfH5S30HoA
bjcV/rsGhlYgxazMe9LT1qtUu4B7pPJEX5/223xBCQBQlNT9HKw7hg+fLnceDQFs
vz5jjpHLIqStowVxkR0B168tJaO10IQPd+Gib/OjbYLmEif3xmsZ463VoeeORVpZ
bvPezBvT/UfKL3cM73JzfnOivGTPBata4UHXeAQBP9rL2Bdk6lWbVsJ2Rt/2Cj0y
968H8BSttZANpbMkcoqOHov+pk+a9e1jswc4LDzkSK134ZlDdyACsBsfuip1GNaa
ysv8N/dDxpWKFg3Vi1kUT+FXcsRQM7sDjMXuQUWvztGnXPkp/sppWB752+A5fzOO
nv8a8qGUQDPt2fuDECRHnsUjD9gZFfaZqbBpVefyGYSf5CLqtszKSIiJSt1Qikfb
HdtP9W6jAhbi3oo0TkzFEd1Bk+LDAdaGnb11Z14+q2jUI/IDoLyTVVc42NufVQl+
t9z2N76OCKu0QiEdjkmVmQy7oc8FnbMqpyw+EsDkwANODHHu0XVQsvxSvy+1OD2X
gL/pT48mojlc+sfpJKsUr0IRFWikf8tmHKLsLPeeAWV/0Ah+e+jeL7BzdZoKWL3v
yzlMQyxIZQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIGBjCCA+6gAwIBAgIJAMufmxQZk8ASMA0GCSqGSIb3DQEBCwUAMIGPMQswCQYD
VQQGEwJDTjEQMA4GA1UECAwHQmVpamluZzEQMA4GA1UEBwwHQmVpamluZzEXMBUG
A1UECgwOTWlsYW5hYzAwNyBMdGQxLTArBgNVBAsMJE1pbGFuYWMwMDcgTHRkIENl
cnRpZmljYXRlIEF1dGhvcml0eTEUMBIGA1UEAwwLTHRkIFJvb3QgQ0EwHhcNMjEw
MTI5MDUwMDA5WhcNNDEwMTI0MDUwMDA5WjCBjzELMAkGA1UEBhMCQ04xEDAOBgNV
BAgMB0JlaWppbmcxEDAOBgNVBAcMB0JlaWppbmcxFzAVBgNVBAoMDk1pbGFuYWMw
MDcgTHRkMS0wKwYDVQQLDCRNaWxhbmFjMDA3IEx0ZCBDZXJ0aWZpY2F0ZSBBdXRo
b3JpdHkxFDASBgNVBAMMC0x0ZCBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOC
Ag8AMIICCgKCAgEAthptqY0f/soGkSB36vOC0sz5Jwwcdp3VzFpfUkY4RVlTEoM9
QDrnCCopcpG28rSda/J3JwmTOY9LUwFvXYkTw/gMOXJhDGyDkrW/mRCcpZ0cXiNQ
rP7zfucPpgYy2/fgv2IvBoRu+Ojm8wm5Fisp1BKCGBhrKAZV1o0lS3kngPb32aiE
a3zYHBIvOtYUm6PCD5pYbTnu5YlhN0MTRgw9GiAarDWzsE+5QO6wD1vwY9cWhS7b
eTQfujSqZR/oxAMN2GKum+w6Pf3wSGGjvoRViFjC76VyCEbhuWtTvXDMB+KLbWJ+
f5CAAygEAh8E240sJJsl0x0vn7k6jsZIUNy3ocUZneqJJiNIfxVqgUrqrN5UEBN3
/Ualok9WNHHVIOkTn7YWzyteY51OPzGQGcvS0/PbemDwiMyG23h28TefjeT1LUSH
L0l8hSy3t+VMCGtvSNsG1iQta9vZjJhBcB5Nt5saU8uwbRRmYaD65lIDrphzP5S3
ET0m23OCKhG5NC29PuB/8pz1yMtl24441P8wpb5O4z2QHUVw9HK34814Z6EVIqlC
fzzLrkp7YQL0WzORQSmaExDAq1wvp6jV8odC3wlY2aADUU68flw9b+SUD9BmG5kK
GIp1eoW2w9ci7wrr4YCvIV98k451pyEuMUPZUZnILIqrKu2ZHV5x6maEsVsCAwEA
AaNjMGEwHQYDVR0OBBYEFLCkZw4eXS4k+vn9F5uqxIxr6iJrMB8GA1UdIwQYMBaA
FLCkZw4eXS4k+vn9F5uqxIxr6iJrMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQAZfNNZ5Q6lKFlc6aiBHX1DzSn7FOYC
3oRlQzZkCaYl3jAoELBQdQErv2ylHyL9Dexxqy0spINcrwdT83XXfBy2skpzHpk0
69iqGbaBV31auPuV0Y2RpOy2TTlPsv1PMWmngc6Dnjmtwxj7EdZQSOTx/ULnqOpC
J2E4IUE/wK4xDjx8DRgiaRxS2r5bY7Qazn9OEx31isoaUDbtJppMyY7CcoLJhCE9
gNcTZB/OzHk3Wz8uQqb8qZXFv0My2YFkOc485viBcV0gMQI4HkHKRbRYSr/SVn66
mFSNyKT/zNETw2+Nxek3xldIECa1OwiXR6dOMcyzxxGezDcKi4wWpynfWfiic6Jj
VAEUB3YeadgG9UzIuzUbcvtXAatJNpatdoIg+ZMMrm0KZ4C6KvRW8voieYw/Fjqp
BmFmE7A9jIvA3/e/0Zn0SqBYEsoMwBbnUfHlCF/uGVHe7HBWYrTwXnh5hiHHqbUZ
5lkcr0RM2ZwmVZ9O97Ea/VjixFzYmuZFCp3dnUyVzf0jmsJ/rgx0CcOIA4JKagFp
tVHuauaFTewxx4lDNTNkUllpuDaPLS63gG+fE49jetZMMFh+dLXiOMMcNgEraJAs
6bgDSfHCYPzhGy0sgTJ/zduE7wV3rGNHofGHciFl4belB+BH5OtUpob0jVgkGChm
95SEj7N4yO0pyw==
-----END CERTIFICATE-----
注意:证书链文件必须包含根证书,因为需要让客户端应用程序找到它。更好的选择(尤其是在管理Intranet的情况下)是在需要连接的每个客户端上安装根证书,在这种情况下,证书链文件仅需要包含您的中间证书。
6-4) 签署服务器和客户端证书
我们将使用中间 CA 签署证书。您可以在各种情况下使用这些证书,例如保护与 Web 服务器的连接或对连接到服务器的客户端进行身份验证。
注意:以下步骤是CA替申请者创建私钥和签名请求(CSR),但申请者从安全角度考虑也可以自己创建私钥和请求,其中的私钥妥善保存于本地,把CSR交给CA,CA则还给它一个签名的证书。在这种情况下,跳过 genrsa 和 req 命令。
6-4-1) 创建私钥
我们的根密钥对和中间密钥对是4096位,服务器证书和客户端证书通常在一年后过期,因此我们可以安全地使用2048位。
注意:尽管4096位比2048位更安全,但它会减慢TLS握手速度并显着增加握手期间的处理器负载。因此,大多数网站使用2048位的密钥对。
译者注:2048位已经不再安全,建议使用4096或8192位。
如果要创建用于网络服务器的密钥对,每次重启该服务器时都需要输保护密码,如果嫌麻烦可以不使用-aes256选项以创建没有密码的私钥。
openssl genrsa -aes256 -out intermediate/private/www.example.com.key.pem 2048
密钥对密码:123456
chmod 400 intermediate/private/www.example.com.key.pem
6-4-2) 创建证书
使用私钥创建证书签名请求(CSR),并且CSR的详细信息无需与中间CA相匹配。对于服务器证书,Common Name(公用名)必须是FQDN(完全限定的域名,例如,www.example.com),而对于客户端证书,Common Name可以是任何唯一标识符(例如电子邮件地址),请注意,客户端证书的Common Name与根证书或中间证书的Common Name不同。
openssl req -config intermediate/openssl.cnf -key intermediate/private/www.example.com.key.pem -new -sha256 -out intermediate/csr/www.example.com.csr.pem
密钥对密码:123456
Country Name (2 letter code) [GB]:CN
State or Province Name [England]:Beijing
Locality Name []:Beijing
Organization Name [Alice Ltd]:Milanac007 Ltd
Organizational Unit Name []:Milanac007 Ltd Web Services
Common Name []:www.example.com
Email Address []:
要创建证书,请使用中间CA对CSR进行签名。如果要在服务器上使用证书,请使用 server_cert扩展项;如果证书将用于用户身份验证,请使用usr_cert扩展项。证书的有效期通常为一年,不过为了方便起见,CA通常会多给几天时间。
openssl ca -config intermediate/openssl.cnf -extensions server_cert -days 375 -notext -md sha256 -in intermediate/csr/www.example.com.csr.pem -out intermediate/certs/www.example.com.cert.pem
密钥对密码:123456
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 4096 (0x1000)
Validity
Not Before: Jan 29 09:55:30 2021 GMT
Not After : Feb 8 09:55:30 2022 GMT
Subject:
countryName = CN
stateOrProvinceName = Beijing
localityName = Beijing
organizationName = Milanac007 Ltd
organizationalUnitName = Milanac007 Ltd Web Services
commonName = www.example.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Server
Netscape Comment:
OpenSSL Generated Server Certificate
X509v3 Subject Key Identifier:
10:74:40:70:05:FE:03:0E:3D:4F:61:82:47:59:4E:82:25:0C:07:BF
X509v3 Authority Key Identifier:
keyid:98:B3:14:F8:D5:65:11:2D:FB:C1:28:31:14:0F:23:A4:A3:E8:AF:43
DirName:/C=CN/ST=Beijing/L=Beijing/O=Milanac007 Ltd/OU=Milanac007 Ltd Certificate Authority/CN=Ltd Root CA
serial:10:00
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication
Certificate is to be certified until Feb 8 09:55:30 2022 GMT (375 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
chmod 444 intermediate/certs/www.example.com.cert.pem
cat intermediate/index.txt, intermediate/index.txt应该出现包含该证书的行:
V 220208095530Z 1000 unknown /C=CN/ST=Beijing/L=Beijing/O=Milanac007 Ltd/OU=Milanac007 Ltd Web Services/CN=www.example.com
6-4-3) 验证证书
openssl x509 -noout -text -in intermediate/certs/www.example.com.cert.pem
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 4096 (0x1000)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, ST=Beijing, O=Milanac007 Ltd, OU=Milanac007 Ltd Certificate Authority, CN=Milanac007 Ltd Intermediate CA
Validity
Not Before: Jan 29 09:55:30 2021 GMT
Not After : Feb 8 09:55:30 2022 GMT
Subject: C=CN, ST=Beijing, L=Beijing, O=Milanac007 Ltd, OU=Milanac007 Ltd Web Services, CN=www.example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:a9:63:8f:dc:f0:f4:9e:b2:36:9a:3f:13:48:6a:
b0:1a:be:8f:bc:e1:33:c1:9d:47:77:f6:a0:ed:52:
e2:49:02:68:35:0d:2e:63:b9:ad:ce:bc:1f:b8:7e:
9a:a4:a1:83:d7:f9:76:8e:74:2f:e4:cf:cc:d5:a6:
e7:e7:20:01:c3:ae:60:89:2b:c8:34:eb:b8:a5:52:
a3:fe:e1:0c:33:de:56:fc:ba:8b:e6:ab:7b:22:7f:
28:8a:39:e8:22:ef:56:34:85:11:14:8a:a9:75:b0:
3a:4d:87:61:c1:6f:2f:22:8b:e8:9b:05:ba:5d:23:
00:19:03:59:9d:36:09:06:cb:bb:24:2c:9b:fa:1c:
32:69:fd:30:be:39:3d:23:1e:ca:e1:84:56:3e:dc:
e1:35:87:b0:02:9e:bf:1d:19:3d:85:12:bd:b7:e2:
be:0b:01:58:23:a2:45:79:68:47:26:4f:d5:8c:43:
3b:ef:e1:3a:9b:b4:e0:62:63:3e:89:df:d2:9c:23:
5a:8c:25:21:0a:b4:85:38:eb:11:ca:77:23:61:31:
e4:59:55:96:e4:01:c7:7f:61:33:91:55:dd:58:da:
96:21:a8:8c:87:51:ab:96:fe:49:8f:2f:a9:0e:99:
35:0c:50:22:2b:b9:54:70:8f:49:22:93:ba:69:41:
88:0d
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Server
Netscape Comment:
OpenSSL Generated Server Certificate
X509v3 Subject Key Identifier:
10:74:40:70:05:FE:03:0E:3D:4F:61:82:47:59:4E:82:25:0C:07:BF
X509v3 Authority Key Identifier:
keyid:98:B3:14:F8:D5:65:11:2D:FB:C1:28:31:14:0F:23:A4:A3:E8:AF:43
DirName:/C=CN/ST=Beijing/L=Beijing/O=Milanac007 Ltd/OU=Milanac007 Ltd Certificate Authority/CN=Ltd Root CA
serial:10:00
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication
Signature Algorithm: sha256WithRSAEncryption
38:ab:fb:22:eb:4d:62:74:1e:1e:dd:a0:9a:34:9a:af:4e:71:
99:7f:cb:51:b3:7f:83:bb:52:18:74:c0:a0:8f:32:6b:1d:70:
1f:35:29:bb:67:65:77:d6:b5:e4:a8:1f:92:6d:d8:d9:a3:23:
4e:9f:06:0d:5a:8b:42:0c:6f:a1:ec:c5:75:2a:57:14:4f:15:
23:d9:9e:ec:ee:ad:c1:09:c7:3e:4e:c2:99:72:6e:fb:73:b9:
79:0f:2a:e3:1e:bc:61:d7:93:cd:57:4a:14:cb:f5:ee:2d:68:
68:73:27:2d:a8:87:a8:13:b9:3e:a4:62:80:77:94:41:c6:92:
cc:44:1c:d2:a4:5d:15:36:b7:cc:c2:7e:37:f9:3a:ea:1b:93:
9a:89:53:bd:3c:55:bf:29:11:a9:73:aa:76:ba:e2:62:de:2d:
3a:a3:8a:6b:1e:3d:af:40:94:53:d0:2f:52:33:c5:be:1b:b3:
4c:a7:1e:86:d4:a2:26:6d:8a:50:78:8d:36:4b:4d:15:d6:7d:
5a:91:63:0e:d0:06:ab:fc:11:9b:76:a8:d8:e1:dd:dd:b4:a1:
33:5b:9c:2f:2a:d4:69:a5:bd:20:f9:7f:d5:da:b2:23:74:7c:
ee:f6:65:67:5d:3a:0e:5a:05:c6:0f:93:7d:3f:d0:59:27:2f:
02:9d:6c:a9:64:43:40:b5:af:c1:9b:16:ab:93:13:16:f4:90:
c8:16:81:9d:cc:8c:cd:ed:ca:f9:d4:ba:b2:f1:94:62:b9:6b:
f2:32:ab:ef:7e:46:02:f3:08:d7:7e:86:61:eb:b9:48:d4:fd:
7d:27:f5:10:9b:df:35:26:f8:b8:51:e1:18:2c:10:83:60:70:
1e:47:64:a3:da:05:51:53:ed:49:08:be:8c:d3:09:6e:33:06:
dc:95:e8:f4:f7:0a:be:ef:00:2d:54:0a:d0:3b:c7:25:0f:c2:
33:88:20:92:61:e6:61:81:7c:0a:c9:72:fb:e8:b5:f4:70:02:
00:5a:e0:78:bf:81:99:31:0b:6e:2d:7a:0c:d4:73:3a:8f:18:
eb:34:48:45:19:2a:cd:d7:22:14:bb:fc:37:e4:74:16:1d:36:
ef:5c:cd:01:09:83:05:d8:18:d0:99:92:08:cf:89:19:f6:f8:
e9:e2:9c:62:2f:85:5c:2e:74:26:27:ed:11:bb:e7:b9:c1:d9:
28:c8:b8:ff:61:1d:97:96:4e:1b:2b:71:e2:ea:31:5f:b7:64:
c2:86:4c:d8:0b:4d:13:1c:25:d0:39:a3:9c:00:0b:d3:39:38:
85:e0:bd:d3:1e:d8:82:49:4c:92:c3:45:c7:25:5a:5d:36:83:
0f:a5:1d:6c:c8:10:12:a9
注:
Issuer(颁发者)是中间CA,Subject(主题)是指证书本身:
输出还将显示X509v3扩展。创建证书时,您使用了server_cert或usr_cert扩展项,相应配置部分中的选项将反映在输出中:
X509v3 extensions:
...
最后,使用我们先前创建的CA证书链文件(ca-chain.cert.pem)来验证新证书是否具有有效的信任链。
openssl verify -CAfile intermediate/certs/ca-chain.cert.pem intermediate/certs/www.example.com.cert.pem
intermediate/certs/www.example.com.cert.pem: OK
6-4-4) 部署证书
现在,您可以将新证书部署到服务器,也可以将证书分发给客户端。部署到服务器应用程序(例如Apache)时,确保以下文件可用:
ca-chain.cert.com
www.example.com.key.pem
www.example.com.cert.pem
如果您是从第三方获得CSR,那就无需使用它的私钥,因此只需将证书链文件(ca-chain.cert.pem)和证书(www.example.com.cert.pem)发回给它们。
6-5) 证书吊销列表
证书吊销列表 (CRL,见RFC5280) 提供已吊销的证书的列表。客户端应用程序(如 Web 浏览器)可以使用 CRL 检查服务器的真实性。服务器应用程序(如Apache或OpenV.P.N)可以使用 CRL 拒绝访问不再受信任的客户端。
在公共可访问的位置(例如http://example.com/intermediate.crl.pem)发布 CRL,第三方可以从此位置获取 CRL,以检查他们依赖的证书是否已被吊销。
注意:一些应用程序供应商已弃用CRL,而是使用联机证书状态协议(OCSP,百度RFC2560,有中文版)。
6-5-1) 准备配置文件
证书颁发机构在签署证书时,通常会将CRL位置编码到证书中,将crlDistributionPoints添加到适当的部分,对于本例,将其添加到[server_cert]部分。
[ server_cert ]
# ... snipped ...
crlDistributionPoints = URI:http://example.com/intermediate.crl.pem
6-5-2) 创建CRL
openssl ca -config intermediate/openssl.cnf -gencrl -out intermediate/crl/intermediate.crl.pem
使用 crl 工具检查 CRL 的内容:
openssl crl -noout -text -in intermediate/crl/intermediate.crl.pem
Certificate Revocation List (CRL):
Version 2 (0x1)
Signature Algorithm: sha256WithRSAEncryption
Issuer: /C=CN/ST=Beijing/O=Milanac007 Ltd/OU=Milanac007 Ltd Certificate Authority/CN=Milanac007 Ltd Intermediate CA
Last Update: Jan 29 10:43:20 2021 GMT
Next Update: Feb 28 10:43:20 2021 GMT
CRL extensions:
X509v3 Authority Key Identifier:
keyid:98:B3:14:F8:D5:65:11:2D:FB:C1:28:31:14:0F:23:A4:A3:E8:AF:43
X509v3 CRL Number:
4096
No Revoked Certificates.
Signature Algorithm: sha256WithRSAEncryption
2e:47:31:92:43:dd:ad:f5:9d:51:47:0b:4a:17:be:92:df:b9:
9b:48:6c:57:04:47:60:94:93:02:73:cf:7d:d6:16:a2:81:e1:
b3:23:d4:f0:ed:23:85:e7:ab:98:17:40:ba:76:8b:01:ca:44:
d7:05:17:6b:a7:8a:c3:cb:cd:20:8a:0c:ae:e1:aa:09:f2:f4:
3e:4a:21:c6:b1:dd:0f:52:46:76:25:3c:c5:0c:40:9c:70:3c:
d5:af:3c:4f:e6:98:19:f4:90:dd:10:92:62:fe:6a:fe:93:df:
66:a1:ea:e3:51:81:f9:13:10:b0:af:76:68:86:91:e5:3d:9c:
bb:88:9f:d6:1b:35:fa:b5:a6:f6:ea:94:9b:52:e6:b8:ef:c6:
78:e5:ce:8d:c3:c5:b1:c2:c3:52:14:a5:43:a5:03:ec:bc:58:
60:95:d2:d0:4e:26:48:8b:88:98:c8:7f:e6:20:ed:98:7e:28:
01:2e:e7:18:b3:e7:a9:10:f4:d8:a9:76:87:2b:a7:37:fa:8e:
de:44:69:07:bc:0d:26:24:66:29:d1:f2:b0:cf:07:e1:b3:09:
d8:61:43:27:8e:34:48:ba:4b:bb:cd:cf:ae:39:58:05:0a:e4:
41:bb:37:d4:53:47:3b:85:ab:b6:0a:d3:ee:25:eb:04:fe:57:
f9:6b:89:23:ca:f2:d3:22:62:52:92:e9:a0:4a:1f:b6:e2:dd:
0f:92:35:c2:32:eb:7e:78:36:07:d8:e9:d2:67:30:b4:d7:5b:
fe:37:d4:59:3b:c7:18:5d:47:1d:f0:8c:35:aa:ee:0a:56:a4:
2f:b7:e7:ae:ab:4b:ac:eb:80:a8:56:67:ee:57:b9:59:db:9c:
00:a7:89:af:5d:0b:f2:4a:b6:ce:2d:e6:31:15:a5:5b:32:10:
c6:96:55:77:b4:9b:42:26:40:69:35:88:2a:ea:58:9f:51:1f:
ed:cf:fd:38:a9:3a:e0:c8:df:51:60:74:12:54:93:3d:b5:6f:
09:43:a9:b3:c6:ab:85:6c:eb:38:01:e1:30:2b:14:b0:f7:64:
7a:08:a8:c9:03:24:fa:1b:1f:a6:d5:a3:01:60:e2:e8:47:76:
5d:1f:5b:25:c4:74:68:5c:cd:4d:db:4d:b3:8c:e6:2b:0c:60:
ef:6b:72:32:5b:b9:19:f3:43:af:bb:a3:63:80:e0:85:55:8e:
f2:66:ff:84:df:48:ce:f9:49:21:52:14:c4:47:51:b5:b3:a2:
18:85:40:ca:75:02:c3:e9:c6:ea:ee:1f:17:cc:ae:69:7c:59:
1c:a6:de:0d:43:b3:af:5f:59:6d:56:e9:f1:32:2e:78:8d:59:
75:87:76:e0:2a:32:cb:29
No Revoked Certificates.
尚未吊销任何证书,因此输出将显示“无吊销证书”
您应该定期重新创建CRL。默认情况下,CRL在30天后过期。这由[CA_default]部分的default_crl_days选项控制。
6-5-3) 吊销证书
让我们看一个例子。爱丽丝(Alice)正在运行Apache服务器,并有一个私人文件夹,上面放着可爱的小猫图片。 爱丽丝想授予她的朋友鲍勃(Bob)访问此收藏的权限。
① Bob创建一个私钥和证书签名请求(CSR):
cd /home/bob
openssl genrsa -aes256 -out intermediate/private/demoForCrl.key.pem 2048
设置密码:123456
openssl req -config intermediate/openssl.cnf -key intermediate/private/demoForCrl.key.pem -new -sha256 -out intermediate/csr/demoForCrl.csr.pem
输入密码:123456
You are about to be asked to enter information that will be incorporated
into your certificate request.
-----
Country Name (2 letter code) [GB]:CN
State or Province Name [England]:Beijing
Locality Name []:
Organization Name [Alice Ltd]:Bob Ltd
Organizational Unit Name []:
Common Name []:bob@example.com
Email Address []:
② Bob将自己的CSR发送给爱丽丝,爱丽丝随后对其进行签名:
cd /root/ca
openssl ca -config intermediate/openssl.cnf -extensions usr_cert -days 375 -notext -md sha256 -in intermediate/csr/demoForCrl.csr.pem -out intermediate/certs/demoForCrl.cert.pem
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 4097 (0x1001)
Validity
Not Before: Jan 29 11:08:44 2021 GMT
Not After : Feb 8 11:08:44 2022 GMT
Subject:
countryName = CN
stateOrProvinceName = Beijing
organizationName = Bob Ltd
commonName = bob@example.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Client, S/MIME
Netscape Comment:
OpenSSL Generated Client Certificate
X509v3 Subject Key Identifier:
3A:6A:31:FC:1F:05:5D:63:61:65:7D:D6:7E:DF:03:C3:94:46:91:B1
X509v3 Authority Key Identifier:
keyid:98:B3:14:F8:D5:65:11:2D:FB:C1:28:31:14:0F:23:A4:A3:E8:AF:43
X509v3 Key Usage: critical
Digital Signature, Non Repudiation, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Client Authentication, E-mail Protection
Certificate is to be certified until Feb 8 11:08:44 2022 GMT (375 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
③ Alice 验证证书是否有效:
openssl verify -CAfile intermediate/certs/ca-chain.cert.pem intermediate/certs/demoForCrl.cert.pem
intermediate/certs/demoForCrl.cert.pem: OK
现在,通过命令 cat intermediate/index.txt 可以看到:
725 V 220208095530Z 1000 unknown /C=CN/ST=Beijing/L=Beijing/O=Milanac007 Ltd/OU=Mil anac007 Ltd Web Services/CN=www.example.com
726 V 220208110844Z 1001 unknown /C=CN/ST=Beijing/O=Bob Ltd/CN=bob@example.com
Alice向Bob发送签名证书,Bob将证书安装在自己的网络浏览器中,现在可以访问爱丽丝的小猫图片,欢呼吧!
④ 但可悲的是,事实证明Bob行为不端,Bob将Alice的小猫图片发布到了《***新闻》上,声称是他自己的照片并广受欢迎,爱丽丝发现了,需要立即撤销了他的访问权限:
openssl ca -config intermediate/openssl.cnf -revoke intermediate/certs/demoForCrl.cert.pem
Revoking Certificate 1001.
Data Base Updated
现在index.txt中与Bob的证书相对应的行以字符R开头,这表示证书已被吊销:
cat intermediate/index.txt
V 220208095530Z 1000 unknown /C=CN/ST=Beijing/L=Beijing/O=Milanac007 Ltd/OU=Milanac007 Ltd Web Services/CN=www.example.com
R 220208110844Z 210129111200Z 1001 unknown /C=CN/ST=Beijing/O=Bob Ltd/CN=bob@example.com
撤销Bob的证书后,Alice必须重新创建CRL。
ca -config intermediate/openssl.cnf -gencrl -out intermediate/crl/intermediate.crl.pem
crl -noout -text -in intermediate/crl/intermediate.crl.pem
Certificate Revocation List (CRL):
Version 2 (0x1)
Signature Algorithm: sha256WithRSAEncryption
Issuer: /C=CN/ST=Beijing/O=Milanac007 Ltd/OU=Milanac007 Ltd Certificate Authority/CN=Milanac007 Ltd Intermediate CA
Last Update: Jan 30 09:44:54 2021 GMT
Next Update: Mar 1 09:44:54 2021 GMT
CRL extensions:
X509v3 Authority Key Identifier:
keyid:98:B3:14:F8:D5:65:11:2D:FB:C1:28:31:14:0F:23:A4:A3:E8:AF:43
X509v3 CRL Number:
4097
Revoked Certificates:
Serial Number: 1001
Revocation Date: Jan 29 11:12:00 2021 GMT
Signature Algorithm: sha256WithRSAEncryption
69:8d:b2:dc:e4:2b:28:a0:85:90:07:9f:02:f1:9d:b2:df:f3:
1f:a8:8d:7c:39:fc:cb:b5:7d:7f:bd:22:9c:f5:37:ac:b4:15:
c6:eb:38:e1:8d:42:ab:56:b4:a1:52:d6:85:22:e1:ec:63:3a:
08:ff:5c:8e:8f:7c:91:fb:84:b1:46:d4:cd:c2:03:e5:9d:a6:
b5:5b:ab:7e:d4:d2:6f:9a:fa:91:d3:40:83:16:e3:1a:ff:d1:
1b:8f:9e:e6:59:8e:61:68:00:8d:39:fe:76:1a:03:06:90:c4:
7c:4a:23:18:12:71:22:3a:cf:19:f3:99:e4:a0:84:12:e8:aa:
96:c5:5f:8d:7c:b6:a7:84:52:73:12:5a:c7:61:f5:d3:b0:a1:
fc:6a:f5:b4:77:82:6c:9d:35:33:c6:0f:7c:4b:50:c8:21:68:
00:60:17:81:5c:15:36:9e:cd:0d:f2:25:cc:ea:a5:22:0d:b4:
7c:59:ef:08:5f:77:57:d7:d2:6b:1d:38:0f:1c:e7:49:6e:39:
60:ad:21:48:1a:01:fd:84:63:46:aa:7c:d3:99:2e:75:c3:99:
68:eb:a9:d8:68:94:da:76:f3:e1:90:29:0e:8b:0a:bb:3a:dd:
f7:45:23:99:28:fd:28:7d:3d:b3:b2:0a:80:6e:31:dd:d4:50:
68:d7:37:bc:1f:19:7c:03:29:40:2a:4a:0c:8a:8f:9f:44:8c:
59:55:50:0a:f3:71:35:84:79:b8:84:b7:ec:d4:73:92:45:50:
55:02:92:e2:b9:0f:40:b1:e2:41:32:a6:c8:bc:27:74:45:80:
92:e3:2a:a0:00:d6:dc:db:b0:24:45:c5:70:aa:ac:9f:26:d7:
6a:9a:73:8a:54:5c:8f:34:d5:06:e1:b5:1b:65:e6:87:25:3c:
d5:f8:71:82:5f:e9:35:cb:8f:cd:23:28:7a:a5:38:de:fa:a3:
59:72:18:d2:93:f6:6a:63:6d:d6:71:8f:ad:c9:c8:56:78:05:
72:0e:2f:bc:44:52:25:fd:93:2c:87:a6:0f:ac:e6:c5:eb:99:
f1:fe:e3:cc:2c:2d:96:38:14:c7:77:8b:e8:6b:15:b5:ee:19:
f1:db:0f:3b:1a:2c:f7:5e:cf:f5:34:35:34:2e:34:46:7c:95:
a6:8b:df:c6:85:eb:e6:f3:78:53:56:15:42:55:81:f7:8b:3c:
e2:67:41:a2:9c:0f:ed:1c:4c:11:28:e7:39:b8:0e:23:00:3b:
25:9e:cf:4c:a8:01:1c:51:85:ce:bf:7c:f3:cc:d8:77:16:3b:
d3:76:3d:6a:f9:12:f4:2e:d0:ef:47:e1:d0:c2:11:1b:47:4b:
f8:9c:0d:b8:8c:08:af:b1
附件1:CA根证书配置文件 root/ca/openssl.cnf
[ ca ]
# `man ca`
default_ca = CA_default
#[CA_default]部分包含一系列默认值,其中的dir字段取值一定要是刚才选择的root/ca
[ CA_default ]
# 目录和文件位置。
dir = /Users/apple/ca_demo/root/ca
certs = $dir/certs
crl_dir = $dir/crl
new_certs_dir = $dir/newcerts
database = $dir/index.txt
serial = $dir/serial
RANDFILE = $dir/private/.rand
# 根私钥和根证书。
private_key = $dir/private/ca.key.pem
certificate = $dir/certs/ca.cert.pem
# 用于证书吊销列表。
crlnumber = $dir/crlnumber
crl = $dir/crl/ca.crl.pem
crl_extensions = crl_ext
default_crl_days = 30
# 不推荐使用SHA-1,因此请改用SHA-2。
default_md = sha256
name_opt = ca_default
cert_opt = ca_default
default_days = 375
preserve = no
policy = policy_strict
#我们将对所有根CA签名应用policy_strict,因为根CA仅用于创建中间CA。
[ policy_strict ]
# 根CA只对match(匹配)的中间证书进行签名。
# 请参阅`man ca`的POLICY FORMAT部分。
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
# 如果值是“ match”,意为请求文件的该字段取值,必须与签署时输入的CA证书的对应字段取值一模一样;如果值是“supplied”,那么它必须存在。如果该值为“optional”,则可选(可留空);所以我们将对所有中间CA签名应用policy_loose而不是policy_strict,因为中间CA正在对可能来自各种第三方的服务器和客户端证书进行签名。
[ policy_loose ]
# 允许中间CA签署更多种类的证书。
# 请参阅“ca”手册页的“策略格式”部分。
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
#在创建证书或证书签名请求时,将应用[req]部分中的选项。
[ req ]
# `req` 工具选项 (`man req`).
default_bits = 2048
distinguished_name = req_distinguished_name
string_mask = utf8only
# 不推荐使用SHA-1,请改用SHA-2。
default_md = sha256
# 使用 -x509选项时要添加的扩展项。
x509_extensions = v3_ca
#声明证书签名请求中通常所需的信息,您可以选择指定一些默认值。
[ req_distinguished_name ]
# See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name
localityName = Locality Name
0.organizationName = Organization Name
organizationalUnitName = Organizational Unit Name
commonName = Common Name
emailAddress = Email Address
#指定一些默认值(可选)。
countryName_default = GB
stateOrProvinceName_default = England
localityName_default =
0.organizationName_default = Alice Ltd
#organizationalUnitName_default =
#emailAddress_default =
#接下来的几个部分是在签署证书时可以应用的扩展项,例如 -extensions v3_ca命令行参数将应用[v3_ca]中设置的选项。
#我们将在创建根证书时应用[v3_ca]扩展:
[ v3_ca ]
# 典型CA的扩展(`man x509v3_config`)。
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
#我们将在创建中间证书时应用v3_ca_intermediate extension(中间扩展项),pathlen:0保证在中间CA下面不能有其他证书颁发机构:
#典型中间CA的扩展(`man x509v3_config`)
[ v3_intermediate_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
[ usr_cert ]
# 客户端证书的扩展项(`man x509v3_config`)。
basicConstraints = CA:FALSE
nsCertType = client, email
nsComment = "OpenSSL Generated Client Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, emailProtection
# 我们将在签署server_cert(服务器证书,例如用于web服务器的证书)时应用服务器证书扩展:
[ server_cert ]
# 服务器证书的扩展项 (`man x509v3_config`).
basicConstraints = CA:FALSE
nsCertType = server
nsComment = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
crlDistributionPoints = URI:http://example.com/intermediate.crl.pem
# 创建证书吊销列表时,将自动应用crl_ext扩展项:
[ crl_ext ]
# CRL扩展项(`man x509v3_config`).
authorityKeyIdentifier=keyid:always
#在签署在线证书状态协议(OCSP)证书时,我们将使用ocsp扩展项:
[ ocsp ]
# OCSP签名证书的扩展项 (`man ocsp`).
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, digitalSignature
extendedKeyUsage = critical, OCSPSigning
附件2:中间证书配置文件 root/ca/intermediate/openssl.cnf
[ ca ]
# `man ca`
default_ca = CA_default
#[CA_default]部分包含一系列默认值,其中的dir字段取值一定要是刚才选择的root/ca
[ CA_default ]
# 目录和文件位置。
dir = /Users/apple/ca_demo/root/ca/intermediate
certs = $dir/certs
crl_dir = $dir/crl
new_certs_dir = $dir/newcerts
database = $dir/index.txt
serial = $dir/serial
RANDFILE = $dir/private/.rand
# 根私钥和根证书。
private_key = $dir/private/intermediate.key.pem
certificate = $dir/certs/intermediate.cert.pem
# 用于证书吊销列表。
crlnumber = $dir/crlnumber
crl = $dir/crl/intermediate.crl.pem
crl_extensions = crl_ext
default_crl_days = 30
# 不推荐使用SHA-1,因此请改用SHA-2。
default_md = sha256
name_opt = ca_default
cert_opt = ca_default
default_days = 375
preserve = no
policy = policy_loose
#我们将对所有根CA签名应用policy_strict,因为根CA仅用于创建中间CA。
[ policy_strict ]
# 根CA只对match(匹配)的中间证书进行签名。
# 请参阅`man ca`的POLICY FORMAT部分。
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
# 如果值是“ match”,意为请求文件的该字段取值,必须与签署时输入的CA证书的对应字段取值一模一样;如果值是“supplied”,那么它必须存在。如果该值为“optional”,则可选(可留空);所以我们将对所有中间CA签名应用policy_loose而不是policy_strict,因为中间CA正在对可能来自各种第三方的服务器和客户端证书进行签名。
[ policy_loose ]
# 允许中间CA签署更多种类的证书。
# 请参阅“ca”手册页的“策略格式”部分。
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
#在创建证书或证书签名请求时,将应用[req]部分中的选项。
[ req ]
# `req` 工具选项 (`man req`).
default_bits = 2048
distinguished_name = req_distinguished_name
string_mask = utf8only
# 不推荐使用SHA-1,请改用SHA-2。
default_md = sha256
# 使用 -x509选项时要添加的扩展项。
x509_extensions = v3_ca
#声明证书签名请求中通常所需的信息,您可以选择指定一些默认值。
[ req_distinguished_name ]
# See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name
localityName = Locality Name
0.organizationName = Organization Name
organizationalUnitName = Organizational Unit Name
commonName = Common Name
emailAddress = Email Address
#指定一些默认值(可选)。
countryName_default = GB
stateOrProvinceName_default = England
localityName_default =
0.organizationName_default = Alice Ltd
#organizationalUnitName_default =
#emailAddress_default =
#接下来的几个部分是在签署证书时可以应用的扩展项,例如 -extensions v3_ca命令行参数将应用[v3_ca]中设置的选项。
#我们将在创建根证书时应用[v3_ca]扩展:
[ v3_ca ]
# 典型CA的扩展(`man x509v3_config`)。
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
#我们将在创建中间证书时应用v3_ca_intermediate extension(中间扩展项),pathlen:0保证在中间CA下面不能有其他证书颁发机构:
#典型中间CA的扩展(`man x509v3_config`)
[ v3_intermediate_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
[ usr_cert ]
# 客户端证书的扩展项(`man x509v3_config`)。
basicConstraints = CA:FALSE
nsCertType = client, email
nsComment = "OpenSSL Generated Client Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, emailProtection
# 我们将在签署server_cert(服务器证书,例如用于web服务器的证书)时应用服务器证书扩展:
[ server_cert ]
# 服务器证书的扩展项 (`man x509v3_config`).
basicConstraints = CA:FALSE
nsCertType = server
nsComment = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
crlDistributionPoints = URI:http://example.com/intermediate.crl.pem
# 创建证书吊销列表时,将自动应用crl_ext扩展项:
[ crl_ext ]
# CRL扩展项(`man x509v3_config`).
authorityKeyIdentifier=keyid:always
#在签署在线证书状态协议(OCSP)证书时,我们将使用ocsp扩展项:
[ ocsp ]
# OCSP签名证书的扩展项 (`man ocsp`).
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, digitalSignature
extendedKeyUsage = critical, OCSPSigning