锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

OpenSSL 编程 二:搭建 CA

时间:2022-09-04 09:00:00 继电器aqw215aweh快速连接器tvr60esh悬臂梁传感器

一、证书

证书 – 将数字签名添加到公钥中

二、证书标准规范X.509

证书由认证机构颁发,用户需要对证书进行验证,果证书的格式奇怪,就不方便了。因此,人们制定了证书的标准和规范,其中使用最广泛的是ITU(International TelecommumcationUnion,国际电信联盟)和ISO(IntemationalOrganizationforStandardization, 国际标准化组织)制定X.509规范。支持许多应用程序x.并将其作为证书生成和交换的标准规范。

X.509是一种非常常见的证书格式。所有证书均符合要求ITU-T X.509国际标准,所以(理论上)可以用作任何其他符合要求的应用程序创建的证书X.应用509标准。X.509证书的结构是使用ASN1(Abstract Syntax Notation One)描述数据结构并使用它ASN.1语法编码。

1、证书规范

最广泛使用的标准是 ITU 和 ISO 联合制定的 X.509 的 v3版本规范 (RFC5280), 以下证书信息域定义如下:

  • 版本号(Version Number):标准版本号目前为版本3,值0x2;

  • 序列号(Serial Number):由CA维护每个证书分配的列号,用于跟踪和取消证书。只要你有发行人的信息和序列号,你就可以识别唯一的证书,最多不超过20字节;

  • 序列号(Serial Number):由CA维护每个证书分配的列号,用于跟踪和取消证书。只要你有发行人的信息和序列号,你就可以识别唯一的证书,最多不超过20字节;

    • sha256-with-RSA-Encryption;
    • ccdsa-with-SHA2S6;
  • 颁发者(Issuer):发证单位的标识信息,如 ” C=CN,ST=Beijing, L=Beijing, O=org.example.com,CN=ca.org。example.com ”;

  • 有效期(Validity): 证书有效期很高,包括起止时间;

  • 主体(Subject): 证书所有者的标识信息(Distinguished Name),如:" C=CN,ST=Beijing, L=Beijing, CN=person.org.example.com”;

  • 主体的公钥信息(SubJect Public Key Info):公钥保护相关信息:

    • 公钥算法 (Public Key Algorithm)公钥算法;
    • 主体公钥(Subject Unique Identifier):公钥的内容。
  • 颁发者唯一号(Issuer Unique Identifier):只有2、3版支持代表发起人的唯一信息,可选;

  • 主体唯一号(Subject Unique Identifier):只有2、3版本支持代表证书实体的唯一信息,可选:

  • 扩展(Extensions,可选): 可选的一些扩展。中可能包括:

    • Subject Key Identifier:实体的秘钥标识多对密钥区分实体;
    • Basic Constraints:说明是否属于 CA;
    • Authority Key Identifier:发证人公钥标识符
    • CRL Distribution Points: 撤销文件的颁发地址
    • Key Usage:证书的用途功能信息。

此外,证书发行人还需要使用自己的私钥添加证书内容签名, 防止他人篡改证书内容。

2、证书格式

X.509 一般推荐在规范中使用PEM(Privacy Enhanced Mail)格式来存储证书相关文件。证书文件名的后缀一般为 .crt 或 .cer 。对应私钥文件文件名后缀一般为 .key。证书请求文件的文件名后缀为 .csr 。有时统一使用pem作为文件名的后缀。

PEM格式存储在文本中。一般包括首尾标记和内容块,内容块使用 Base64 进行编码。

编码格式总结:

  • X.509 DER(Distinguished Encoding Rules)后缀为:.der .cer .crt。
  • X.509 BASE64 编码(PEM格式),后缀为:.pem .cer .crt。

3、CA

证书是用来证明某件事真的是某件事的。一般来说,证书就像上面的公章。相应证书的真实性可以通过公章证明。

CA是Certificate Authority的缩写,也叫“证书授权中心”。它是负责管理和签发证书的第三方机构, 就像一家可靠的中介公司。一般来说,CA它必须得到所有行业和公众的信任和认可。所以它必须有足够的权威。A、B在找到C公司之前,两家公司都必须信任C公司 C 作为公章的中介。

4、CA证书

CA 顾名思义,证书就是CA颁发的证书。

5.证书信任链

证书可以直接有信任关系, 另一个证书也是真实可信的. 事实上,证书之间的信任关系是可以嵌套的。C 信任 A1,A1 信任 A2,A2 信任 A3…这叫证书信任链。只要你信任链上的第一个证书,后续的证书就可以信任。

顶部树根位置的证书是根证书。除了根证,其他证书都要靠上一级证书来证明自己。那么谁来证明根证是可靠的呢?其实根证证明自己是可靠的(或者换句话说,根证不需要被证明)。

证书是整个证书体系安全的基础。因此,如果证书系统中的根证书有问题(不再可信),则根证书信任的所有其他证书将不再可信。

三、公钥基础设施(PKI)

只制定证书规范不足以支持公钥的实际应用。我们还需要许多其他规范,如谁应该颁发证书、如何颁发证书、私钥泄露时如何无效证书、计算机之间的数据交换格式等。本节将介绍公钥使用更有效的公钥基础设施。

1、公钥基础设施

公钥基础设施(Public-Key infrastructure)它是为了更有效地使用公钥而制定的一系列规范和规范的总称。公钥基础设施通常简称为英语缩写PKI。

PKI它只是一个总称,而不是指单独的规范或规格。例如,RSA公司制定的PKCS(Public-Key Cryptography Standards,公钥密码标准PKI一种,互联网规格RFC(Requestfor Comments)也有很多和PKI相关文件。此外,X.509这样的规范也是如此PKI的一种。在开发PKI程序时所使用的由各个公司编写的API(Application Programming Interface, 应用程序编程接口)和规格设计书也可以算是PKI相关规格。

2、PKI的组成要素

PKI 主要有三个要素:

  • 用户 — 使用PKI的人
  • 认证机构 — 颁发证书的人
  • 仓库 — 保存证书数据库

1、用户

有两种用户:一种是希望使用PKI注册自己公钥的人,另一个是想使用注册公钥的人。让我们来看看这两个用户想要做什么。

注册公钥用户的操作

  • 生成密钥对(也可由认证机构生成)
  • 公钥在认证机构注册
  • 向认证机构申请证书
  • 根据需要申请作废已注册的公钥
  • 解密接收到的密文
  • 数字签名消息

使用注册公钥用户的操作

  • 将消息加密发送给接收者
  • 验证数字签名

2、认证机构(CA)

认证机构(Certification Authority,CA)是对证书进行管理的人。认证机构具体所进行的操作如下:

  • 生成密钥对 (也可以由用户生成)
  • 在注册公钥时对本人身份进行认证, 生成并颁发证书
  • 作废证书

3、仓库

仓库(repository)是一个保存证书的数据库,PKI用户在需要的时候可以从中获取证书.它的作用有点像打电话时用的电话本。仓库也叫作证书目录。

3、各种各样的PKI

公钥基础设施(PKI)这个名字总会引起一些误解,比如说“面向公众的权威认证机构只有一个",或者“全世界的公钥最终都是由一个根CA来认证的",其实这些都是不正确的。认证机构只要对公钥进行数字签名就可以了,因此任何人都可以成为认证机构,实际上世界上已经有无数个认证机构了。

国家、地方政府、医院、图书馆等公共组织和团体可以成立认证机构来实现PKI,公司也可以出于业务需要在内部实现PKI,甚至你和你的朋友也可以以实验为目的来构建PKI。

四、openssl生成CA证书

openssl中有如下后缀名的文件:

  • .key格式:私有的密钥;
  • .csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写;
  • .crt格式:证书文件,certificate的缩写;
  • .crl格式:证书吊销列表,Certificate Revocation List的缩写;
  • .pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式;
  • .p12 "或者 “.pfx” : 用于实现存储许多加密对象在一个单独的文件中。通常用它来打包一个私钥及有关的 X.509 证书,或者打包信任链的全部项目。

1、CA根证书的生成步骤

生成CA私钥(.key)–>生成CA证书请求(.csr)–>自签名得到根证书(.crt)(CA给自已颁发的证书)。

1、制作 ca.key 私钥

openssl genrsa -aes256 -out ca.key 2048

说明:

  • genrsa:生成RSA密钥;
  • -aes256:密钥加密模式;
  • -out ca.key:指定输出文件名;
  • 2048:密钥长度;
onlylove@ubuntu:~/my/openssl/ca$ ls -al
total 8
drwxrwxr-x 2 onlylove onlylove 4096 Jun 19 17:55 .
drwxrwxr-x 3 onlylove onlylove 4096 Jun 19 17:49 ..
onlylove@ubuntu:~/my/openssl/ca$ openssl genrsa -aes256 -out ca.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
..............+++++
.......................+++++
e is 65537 (0x010001)
# 输入密钥加密密码(需要记住此密码,使用时需要)
Enter pass phrase for ca.key:
Verifying - Enter pass phrase for ca.key:
onlylove@ubuntu:~/my/openssl/ca$ ls -al
total 12
drwxrwxr-x 2 onlylove onlylove 4096 Jun 19 18:05 .
drwxrwxr-x 3 onlylove onlylove 4096 Jun 19 17:49 ..
-rw------- 1 onlylove onlylove 1766 Jun 19 18:06 ca.key
onlylove@ubuntu:~/my/openssl/ca$
onlylove@ubuntu:~/my/openssl/ca$ cat ca.key 
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,406EDBD323422C282952DF2CC600F9D6

iFmy7svke6O9sqRkAm2lzMb8IuIRHXwLNSfg4oJErG3/hIqMfOqI/nFQWltaIJtI
cQFfn4+MoxINJnN2Ob8r4t1BwY7MipapTVBrSuwFl6TeG+ZYYAltOG6Ph7T2kjLA
FhtWtcWOktA093D4gyn71gyo0wabQm5U/QxAxj3Z8q+5SahtzSLvrJCHaymVpuQ9
P2jdOL4QhijvgCqlfE+bxSZrq4J5Xdgbrib9Z5GdrOVGkf8TavaC9yjPH1/mxjmU
t2+mURSHv2zSHbpY3OaZ1PEt3tkkCKHT5vOwFltMxEuyagfjVbyOkQGqrb0mymn3
/bLBkXaPbA10ZF+LfgBRjDsiVDCVWBPHOty9NaglmjELXBvFhUCYvtmLVcYYkd98
hS4cA8thtUMOrM0uCgWD3Z5ELXqQpyXQ/UcG4iYTedEx8TE0zVs3qnuC3U3VvZXU
dj1knbKcWF2/eohg8z/Hf6VEZ5eJ0WK7lcjEWfJsSL4piT0gRxcgTuBEl7g/vruc
jWQg0tVcAn+UBjP6ZCLJf6SUDntbOBn5e9eZbHP3/zVHwth+UPBtxdFr5HQVVYpH
MBC5PNW7N90749k0MPOMQ/NI3BkJeOOLmOxIK5FGSCj03BIQgRnB2H2JezakLcc8
k0Yg5SOFQNvtk2HNMit/LOIg8ZFECaetEqS7bhGTvbAbFvlH1CwCCHaJYh9861Ib
3HqJtWgLrXptOlGsJCW7dgcO4U0PqRhuL/lI4YcMJyyKMvOPyI3Z5So+MqOrdFdL
1tUSvS55toXEaZleut4OXq6aFn9aCdIJ1tLz3whyNPc/SJvlmocRhdCITVQTYr/A
i4NrdpPRVRmZ/MwsbZ16QqSzkgdTjGcPEq+nWfqmd7qINRfWaDquEBDkM9wUf5Rb
Y9DPCgtF6IbZLu2lXlK8Gdk0rVlBT0EHR/srflUnUinCs3Y6wTBeVsnctQTIXVlf
DDVYRqLVhvfCzmy1K+OFFAsCZofwiyO09C0ZqNp1KNDmMxNjn1o9SJtfudDv6k/m
nTB1yDINwUHvw90QrLYiLaMi8OjrWO8l62z2lvWNfbPoRwL7sVEu4W7BXANb/u99
/GSl8IdVpFFZ6LqgnfeYgsIapHZi8F6RCTj4i6gYA9qBDB6/6vcjlyEuW/JiFxMZ
0mGxw9ciJTdtcgNKknzJbKxizl3102b0rZ/A6wHZaCafsacu2XWjWR7vH9uTRbPF
bSP6bO+lF2DDnWkDwa2SQxvd0Ked+qREoErY6VdoSrZ+CJo5Qstnfyuw3WtPVeAn
blSEjuNK7Bygc/1mP+4g40nsse+aKgDRrD+U6ioaV83c1AM229Ri3sXPiWR9cOaz
+lYIb4WX7wxXz3Yb/FFZUz+mM01dNqmHSxo38ihxG0W4V3Qs38gfjZIRsCG0XhlM
I86xxbnIU/VYY/NJJZ4p90Uwq+yRYqgmpQeHt6JBI/0IZaxKqxDHdy05K/k8F5cp
zyeMFIR0/73dMzQI131x/GGQVMCFUBgWKK22wubK3Kbu8X8W93ZDcptevOmP8Bzg
aShWWBH5l8joPScyjDhfZ3KyqnC56Wwzxw0dMcrS8b9I8enp4IZHHHF0SBphrWow
-----END RSA PRIVATE KEY-----
onlylove@ubuntu:~/my/openssl/ca$ 

2、请求证书

证数各参数含义如下:

  • C-----国家(Country Name)
  • ST----省份(State or Province Name)
  • L----城市(Locality Name)
  • O----公司(Organization Name)
  • OU----部门(Organizational Unit Name)
  • CN----产品名(Common Name)
  • emailAddress----邮箱(Email Address)
openssl req -new -sha256 -key ca.key -out ca.csr -subj "/C=CN/ST=SD/L=JN/O=QDZY/OU=www.test.com/CN=CA/emailAddress=admin@test.com"

说明:

onlylove@ubuntu:~/my/openssl/ca$ ls -la
total 12
drwxrwxr-x 2 onlylove onlylove 4096 Jun 19 18:21 .
drwxrwxr-x 3 onlylove onlylove 4096 Jun 19 17:49 ..
-rw------- 1 onlylove onlylove 1766 Jun 19 18:06 ca.key
onlylove@ubuntu:~/my/openssl/ca$ openssl req -new -sha256 -key ca.key -out ca.csr -subj "/C=CN/ST=SD/L=JN/O=QDZY/OU=www.test.com/CN=CA/emailAddress=admin@test.com"
# 输入私钥保护密码
Enter pass phrase for ca.key:
onlylove@ubuntu:~/my/openssl/ca$ ls -al
total 16
drwxrwxr-x 2 onlylove onlylove 4096 Jun 19 18:22 .
drwxrwxr-x 3 onlylove onlylove 4096 Jun 19 17:49 ..
-rw-rw-r-- 1 onlylove onlylove 1029 Jun 19 18:22 ca.csr
-rw------- 1 onlylove onlylove 1766 Jun 19 18:06 ca.key
onlylove@ubuntu:~/my/openssl/ca$
onlylove@ubuntu:~/my/openssl/ca$ cat ca.csr 
-----BEGIN CERTIFICATE REQUEST-----
MIICvjCCAaYCAQAweTELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAlNEMQswCQYDVQQH
DAJKTjENMAsGA1UECgwEUURaWTEVMBMGA1UECwwMd3d3LnRlc3QuY29tMQswCQYD
VQQDDAJDQTEdMBsGCSqGSIb3DQEJARYOYWRtaW5AdGVzdC5jb20wggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDe7iocm9Hsz1OGSOtVX2xQab5znJoM4JH
LNuYwJ7ZYTWF5OMv1vgdp3vBTRHxKkFiQoNzBeNKm1g1XwJwq5fIJud7hFDNh3x5
w4noJBGSIJjXrkbS0x4D66kF/3CPdlY+MjYEEbSQES245pJHBf5sZpHl/4UImPwh
zc+Z2E+faGPlDVBd03eZCs83mPFlVKI3Z98zw9zr/yo0pCQ3DMLIv8C0x1P8x02m
ipQ0EptFgPbiOchGZYY5ZXi98Eyvuxvs3WhzFQfXb5+90140QaEBE8uKxSMhdzLC
q8LJwSw9VKz5d4dAfQwO/qfhYd3rIdUu5Y5EiImtI2uAE4Cn04KtAgMBAAGgADAN
BgkqhkiG9w0BAQsFAAOCAQEARH9ZumNiwMq+psv4fpwjvW+Ij+5NuR/p7DCTei0i
Y1X72sSH2CQiEQSLD754aKvC9F8qezy/mpabmXh4ZU4j/33hsQh1VPAqIxgHxIL7
05kGF6vx/o+1sDAleKdWgc1HSNR0CpxeOXu7k/UvdEIfCQG5hify6bll9Kzgf7XD
tWLm27adxlRescFHspCiBFOtGdEMFpBnIg9yKWnyb163Wpo5aWUOuJQ7RUr7hrRp
nqCWs1mfqiQP5hGtL3xMtmPz6sqtqprz1zuXsP1sbvLVpw+wj1h3HPOEe0xLX1Yq
Yq+FuiCPqGXdjsqDqODmn4BU0kqn3W6qkAtBQxvjPCvdNg==
-----END CERTIFICATE REQUEST-----
onlylove@ubuntu:~/my/openssl/ca$

3、自签证书

openssl x509 -req -days 36500 -sha256 -extensions v3_req -extensions v3_ca -signkey ca.key -in ca.csr -out ca.cer

说明:

  • x509:多用途的证书工具;
  • -req:输入为证书请求,需要进行处理;
  • -days 36500:设置证书有效期;
  • -sha256:指定摘要算法;
  • -extensions v3_req:指定 X.509 v3版本;
  • -extensions v3_ca:生成CA扩展名;
  • -signkey ca.key:自签证书参数;
  • -in ca.csr:指定输入文件名;
  • -out ca.cer:指定输出文件名;
onlylove@ubuntu:~/my/openssl/ca$ ls -la
total 16
drwxrwxr-x 2 onlylove onlylove 4096 Jun 19 18:41 .
drwxrwxr-x 3 onlylove onlylove 4096 Jun 19 17:49 ..
-rw-rw-r-- 1 onlylove onlylove 1029 Jun 19 18:22 ca.csr
-rw------- 1 onlylove onlylove 1766 Jun 19 18:06 ca.key
onlylove@ubuntu:~/my/openssl/ca$ openssl x509 -req -days 36500 -sha256 -extensions v3_req -extensions v3_ca -signkey ca.key -in ca.csr -out ca.cer
Signature ok
subject=C = CN, ST = SD, L = JN, O = QDZY, OU = www.test.com, CN = CA, emailAddress = admin@test.com
Getting Private key
Enter pass phrase for ca.key:
onlylove@ubuntu:~/my/openssl/ca$ ls -la
total 20
drwxrwxr-x 2 onlylove onlylove 4096 Jun 19 18:42 .
drwxrwxr-x 3 onlylove onlylove 4096 Jun 19 17:49 ..
-rw-rw-r-- 1 onlylove onlylove 1269 Jun 19 18:42 ca.cer
-rw-rw-r-- 1 onlylove onlylove 1029 Jun 19 18:22 ca.csr
-rw------- 1 onlylove onlylove 1766 Jun 19 18:06 ca.key
onlylove@ubuntu:~/my/openssl/ca$
onlylove@ubuntu:~/my/openssl/ca$ cat ca.cer 
-----BEGIN CERTIFICATE-----
MIIDezCCAmMCFCKW4mTA9+X5LsoGBcTY1Vw+C+UhMA0GCSqGSIb3DQEBCwUAMHkx
CzAJBgNVBAYTAkNOMQswCQYDVQQIDAJTRDELMAkGA1UEBwwCSk4xDTALBgNVBAoM
BFFEWlkxFTATBgNVBAsMDHd3dy50ZXN0LmNvbTELMAkGA1UEAwwCQ0ExHTAbBgkq
hkiG9w0BCQEWDmFkbWluQHRlc3QuY29tMCAXDTIyMDYxOTEwNDIwOFoYDzIxMjIw
NTI2MTA0MjA4WjB5MQswCQYDVQQGEwJDTjELMAkGA1UECAwCU0QxCzAJBgNVBAcM
AkpOMQ0wCwYDVQQKDARRRFpZMRUwEwYDVQQLDAx3d3cudGVzdC5jb20xCzAJBgNV
BAMMAkNBMR0wGwYJKoZIhvcNAQkBFg5hZG1pbkB0ZXN0LmNvbTCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAMN7uKhyb0ezPU4ZI61VfbFBpvnOcmgzgkcs
25jAntlhNYXk4y/W+B2ne8FNEfEqQWJCg3MF40qbWDVfAnCrl8gm53uEUM2HfHnD
iegkEZIgmNeuRtLTHgPrqQX/cI92Vj4yNgQRtJARLbjmkkcF/mxmkeX/hQiY/CHN
z5nYT59oY+UNUF3Td5kKzzeY8WVUojdn3zPD3Ov/KjSkJDcMwsi/wLTHU/zHTaaK
lDQSm0WA9uI5yEZlhjlleL3wTK+7G+zdaHMVB9dvn73TXjRBoQETy4rFIyF3MsKr
wsnBLD1UrPl3h0B9DA7+p+Fh3esh1S7ljkSIia0ja4ATgKfTgq0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAOCwDvijmaNz8JC0LHMGPNzcawFEyFkK7ZCDa8CRLt7xh
Zrc+yOTTKaS7A9FJ0+WMOuSKZgQPrtpZ5u5pTGLLdLWotQRG1A4/pSJTZrzo1qmw
rCR4cngXaS84UCulyk3Wx5XQqrEbv22GBgpZeFVAOx6gtlhsO2TBkBBrHsAYtpX7
FjJOn0sLhYMKDccztF1a6I6I9TR00VIeYKjxIP2DMc6lk8GyTQLIJyML0rc0/dci
3tc3uoYSFuFXXJ4BzgBJRBR3pRfFT92gMXbP8EpHVu8xps4dS/66/xj6mfHaBX95
XMC0pBl1jGLlLEj9AIG9SHlE+JiPNtG3I9ctJL9jxw==
-----END CERTIFICATE-----
onlylove@ubuntu:~/my/openssl/ca$

2、生成服务端证书

1、创建服务器私钥

openssl genrsa -aes256 -out server.key 2048

说明:

  • genrsa:生成RSA密钥;
  • -aes256:密钥加密模式;
  • -out server.key:指定输出文件名;
  • 2048:密钥长度;
onlylove@ubuntu:~/my/openssl/ca$ ls -la
total 20
drwxrwxr-x 2 onlylove onlylove 4096 Jun 19 18:42 .
drwxrwxr-x 3 onlylove onlylove 4096 Jun 19 17:49 ..
-rw-rw-r-- 1 onlylove onlylove 1269 Jun 19 18:42 ca.cer
-rw-rw-r-- 1 onlylove onlylove 1029 Jun 19 18:22 ca.csr
-rw------- 1 onlylove onlylove 1766 Jun 19 18:06 ca.key
onlylove@ubuntu:~/my/openssl/ca$ openssl genrsa -aes256 -out server.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
..+++++
...................................+++++
e is 65537 (0x010001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
onlylove@ubuntu:~/my/openssl/ca$ ls -la
total 24
drwxrwxr-x 2 onlylove onlylove 4096 Jun 19 18:47 .
drwxrwxr-x 3 onlylove onlylove 4096 Jun 19 17:49 ..
-rw-rw-r-- 1 onlylove onlylove 1269 Jun 19 18:42 ca.cer
-rw-rw-r-- 1 onlylove onlylove 1029 Jun 19 18:22 ca.csr
-rw------- 1 onlylove onlylove 1766 Jun 19 18:06 ca.key
-rw------- 1 onlylove onlylove 1766 Jun 19 18:48 server.key
onlylove@ubuntu:~/my/openssl/ca$

2、生成证书请求

openssl req -new -sha256 -key server.key -out server.csr -subj "/C=CN/ST=SD/L=JN/O=QDZY/OU=www.test.com/CN=SERVER/emailAddress=admin@test.com"

说明:

  • req:生成和处理PKCS#10证书请求;
  • -new:生成新的证书请求以及私钥,默认为1024比特;
  • -sha256:指定摘要算法;
  • -key server.key:使用私钥文件;
  • -out server.csr:指定输出文件名;
  • -subj:指定生成的证书请求的用户信息;
onlylove@ubuntu:~/my/openssl/ca$ ls -la
total 24
drwxrwxr-x 2 onlylove onlylove 4096 Jun 19 18:47 .
drwxrwxr-x 3 onlylove onlylove 4096 Jun 19 17:49 ..
-rw-rw-r-- 1 onlylove onlylove 1269 Jun 19 18:42 ca.cer
-rw-rw-r-- 1 onlylove onlylove 1029 Jun 19 18:22 ca.csr
-rw------- 1 onlylove onlylove 1766 Jun 19 18:06 ca.key
-rw------- 1 onlylove onlylove 1766 Jun 19 18:48 server.key
onlylove@ubuntu:~/my/openssl/ca$ openssl req -new -sha256 -key server.key -out server.csr -subj "/C=CN/ST=SD/L=JN/O=QDZY/OU=www.test.com/CN=SERVER/emailAddress=admin@test.com"
Enter pass phrase for server.key:
onlylove@ubuntu:~/my/openssl/ca$ ls -la
total 28
drwxrwxr-x 2 onlylove onlylove 4096 Jun 19 18:51 .
drwxrwxr-x 3 onlylove onlylove 4096 Jun 19 17:49 ..
-rw-rw-r-- 1 onlylove onlylove 1269 Jun 19 18:42 ca.cer
-rw-rw-r-- 1 onlylove onlylove 1029 Jun 19 18:22 ca.csr
-rw------- 1 onlylove onlylove 1766 Jun 19 18:06 ca.key
-rw-rw-r-- 1 onlylove onlylove 1033 Jun 19 18:51 server.csr
-rw------- 1 onlylove onlylove 1766 Jun 19 18:48 server.key
onlylove@ubuntu:~/my/openssl/ca$

3、使用CA证书签署服务器证书

openssl x509 -req -days 36500 -sha256 -extensions v3_req  -CA  ca.cer -CAkey ca.key  -CAserial ca.srl  -CAcreateserial -in server.csr -out server.cer

说明:

  • x509:多用途的证书工具;
  • -req:输入为证书请求,需要进行处理;
  • -days 36500:设置证书有效期;
  • -sha256:指定摘要算法;
  • -extensions v3_req:指定 X.509 v3版本;
  • -CA ca.cer:设置CA文件,必须为PEM格式;
  • -CAkey ca.key:设置CA私钥文件,必须为PEM格式;
  • -CAserial ca.srl:由arg指定序列号文件;
  • -CAcreateserial:如果不存在,创建序列号文件;
  • -CAcreateserial:如果不存在,创建序列号文件;
  • -in server.csr:指定输入文件名;
  • -out server.cer:指定输出文件名;
onlylove@ubuntu:~/my/openssl/ca$ ls -al
total 28
drwxrwxr-x 2 onlylove onlylove 4096 Jun 19 18:51 .
drwxrwxr-x 3 onlylove onlylove 4096 Jun 19 17:49 ..
-rw-rw-r-- 1 onlylove onlylove 1269 Jun 19 18:42 ca.cer
-rw-rw-r-- 1 onlylove onlylove 1029 Jun 19 18:22 ca.csr
-rw------- 1 onlylove onlylove 1766 Jun 19 18:06 ca.key
-rw-rw-r-- 1 onlylove onlylove 1033 Jun 19 18:51 server.csr
-rw------- 1 onlylove onlylove 1766 Jun 19 18:48 server.key
onlylove@ubuntu:~/my/openssl/ca$ openssl x509 -req -days 36500 -sha256 -extensions v3_req -extensions v3_req  -CA  ca.cer -CAkey ca.key  -CAserial ca.srl  -CAcreateserial -in server.csr -out server.cer
Signature ok
subject=C = CN, ST = SD, L = JN, O = QDZY, OU = www.test.com, CN = SERVER, emailAddress = admin@test.com
Getting CA Private Key
Enter pass phrase for ca.key:
onlylove@ubuntu:~/my/openssl/ca$ ls -al
total 36
drwxrwxr-x 2 onlylove onlylove 4096 Jun 19 18:58 .
drwxrwxr-x 3 onlylove onlylove 4096 Jun 19 17:49 ..
-rw-rw-r-- 1 onlylove onlylove 1269 Jun 19 18:42 ca.cer
-rw-rw-r-- 1 onlylove onlylove 1029 Jun 19 18:22 ca.csr
-rw------- 1 onlylove onlylove 1766 Jun 19 18:06 ca.key
-rw-rw-r-- 1 onlylove onlylove   41 Jun 19 18:58 ca.srl
-rw-rw-r-- 1 onlylove onlylove 1273 Jun 19 18:58 server.cer
-rw-rw-r-- 1 onlylove onlylove 1033 Jun 19 18:51 server.csr
-rw------- 1 onlylove onlylove 1766 Jun 19 18:48 server.key
onlylove@ubuntu:~/my/openssl/ca$

3、生成客户端证书

1、生成客户端私钥

openssl genrsa -aes256 -out client.key 2048

2、申请证书

openssl req -new -sha256 -key client.key  -out client.csr -subj "/C=CN/ST=SD/L=JN/O=QDZY/OU=www.test.com/CN=CLIENT/emailAddress=admin@test.com"

3、使用CA证书签署客户端证书

openssl x509 -req -days 36500 -sha256 -extensions v3_req  -CA  ca.cer -CAkey ca.key  -CAserial ca.srl  -CAcreateserial -in client.csr -out client.cer

4、测试

1、单向认证

服务器:

openssl s_server -CAfile ca.cer -cert server.cer -key server.key -accept 22580

客户端:

openssl s_client -CAfile ca.cer -cert client.cer -key client.key -connect 127.0.0.1 -port 22580

服务端测试:

onlylove@ubuntu:~/my/openssl/ca$ openssl s_server -CAfile ca.cer -cert server.cer -key server.key -accept 22580
Enter pass phrase for server.key:
Using default temp DH parameters
ACCEPT
-----BEGIN SSL SESSION PARAMETERS-----
MH4CAQECAgMEBAITAgQgL9VC8NgN9VZLV74dqggEunz5qD54bQy9b0kdl9pOTMYE
MDsKzEaUmsNjKfcBUuSQK5+sYAewPQeQwgX8WopmQAY5UwufigX40JtiRuL0uLpI
4qEGAgRirx6AogQCAhwgpAYEBAEAAACuBwIFAM3nfZ0=
-----END SSL SESSION PARAMETERS-----
Shared ciphers:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA
Signature Algorithms: ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:Ed25519:Ed448:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA+SHA256:RSA+SHA384:RSA+SHA512:ECDSA+SHA224:RSA+SHA224:DSA+SHA224:DSA+SHA256:DSA+SHA384:DSA+SHA512
Shared Signature Algorithms: ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:Ed25519:Ed448:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA+SHA256:RSA+SHA384:RSA+SHA512:ECDSA+SHA224:RSA+SHA224
Supported Elliptic Groups: X25519:P-256:X448:P-521:P-384
Shared Elliptic groups: X25519:P-256:X448:P-521:P-384
CIPHER is TLS_AES_256_GCM_SHA384
Secure Renegotiation IS supported
ERROR
shutting down SSL
CONNECTION CLOSED
^C
onlylove@ubuntu:~/my/openssl/ca$ 

客户端测试:

onlylove@ubuntu:~/my/openssl/ca$ openssl s_client -CAfile ca.cer -cert client.cer -key client.key -connect 127.0.0.1 -port 22580
Enter pass phrase for client.key:
CONNECTED(00000003)
Can't use SSL_get_servername
depth=1 C = CN, ST = SD, L = JN, O = QDZY, OU = www.test.com, CN = CA, emailAddress = admin@test.com
verify return:1
depth=0 C = CN, ST = SD, L = JN, O = QDZY, OU = www.test.com, CN = SERVER, emailAddress = admin@test.com
verify return:1
---
Certificate chain
 0 s:C = CN, ST = SD, L = JN, O = QDZY, OU = www.test.com, CN = SERVER, emailAddress = admin@test.com
   i:C = CN, ST = SD, L = JN, O = QDZY, OU = www.test.com, CN = CA, emailAddress = admin@test.com
 1 s:C = CN, ST = SD, L = JN, O = QDZY, OU = www.test.com, CN = CA, emailAddress = admin@test.com
   i:C = CN, ST = SD, L = JN, O = QDZY, OU = www.test.com, CN = CA, emailAddress = admin@test.com
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDfzCCAmcCFEPocgB5EgJn64OGxsBgMTb2WNRYMA0GCSqGSIb3DQEBCwUAMHkx
CzAJBgNVBAYTAkNOMQswCQYDVQQIDAJTRDELMAkGA1UEBwwCSk4xDTALBgNVBAoM
BFFEWlkxFTATBgNVBAsMDHd3dy50ZXN0LmNvbTELMAkGA1UEAwwCQ0ExHTAbBgkq
hkiG9w0BCQEWDmFkbWluQHRlc3QuY29tMCAXDTIyMDYxOTEwNTg0OFoYDzIxMjIw
NTI2MTA1ODQ4WjB9MQswCQYDVQQGEwJDTjELMAkGA1UECAwCU0QxCzAJBgNVBAcM
AkpOMQ0wCwYDVQQKDARRRFpZMRUwEwYDVQQLDAx3d3cudGVzdC5jb20xDzANBgNV
BAMMBlNFUlZFUjEdMBsGCSqGSIb3DQEJARYOYWRtaW5AdGVzdC5jb20wggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuOKiZxd1yj/FKAb13+NqOlWxPZtG0
pglaMqcXLFfSqXtri5DoX3c/TKJ1kSMg7NYEll35/pKUIBrbJPZo9NGmKwK0Xo+G
MKl5vSop/Z+xnsgF2BdvldYz3QEqgcwNCzujt2p2HGbdq2yogCCVpAFjCe3fbF8V
0BqyomDyqJ20UeTtXD9+nA/8jl7BZCBU3FC8y6H8EddbDY4Ye2HJ2pAwc64gBmFb
mCdm6cn9so/m5jpnOIb3R+r5ZCpNUzODCgT288c/XpYfsrPBjBRBM/4QPyxqs/8B
TslzqmXWpJOYDt5lbAiOq8P3RW+J8vLB4djmddct5ENEh2Shh3T4GyElAgMBAAEw
DQYJKoZIhvcNAQELBQADggEBACwgMlvrFaJyDb0NA2QlED/Nd4e5p5MbrnUDfD1k
gjEMxGXZ4IElV3XBtoR/vdHxIlvPIXJo2IH6wy/ddsBM2WO8mOzKCKaOXmVS479F
leidQKlca7t39Hr4VAesaCQGembLWzmoAoe+LrWKJ4Z0ttKaGkipuSaba9/rtCgO
F62vCarzA9Y39twtXnfMuDSxtZ8+iifPaoS+by8aa1p5Dk9RKc8OVrEseHbyHhQG
qr9ucjQfX2ASHH9Jf44T5XXSq+qFF72aJnSEgo95kqNZhIKtyT74MB1k7HIvFmH0
mlvt0ZjcgKia11h8Cyu48TEfHB+ymzByjVlnrwRXtuRAkSg=
-----END CERTIFICATE-----
subject=C = CN, ST = SD, L = JN, O = QDZY, OU = www.test.com, CN = SERVER, emailAddress = admin@test.com

issuer=C = CN, ST = SD, L = JN, O = QDZY, OU = www.test.com, CN = CA, emailAddress = admin@test.com

---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 2355 bytes and written 363 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: 3490F46D0380F9ECBA0A4AB2CDB7FBB37797065B5F3459392435E5D7E93D5C1A
    Session-ID-ctx: 
    Resumption PSK: CD37699F6F46DED28B6F7F60A5869DC879E2EE64DEB89AD1B7CC543A9C4C705510EECDEE574AC32588E29C8C0094ED5E
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    0000 - 53 50 b1 82 d9 ee 01 10-44 a8 85 19 6c dc a8 44   SP......D...l..D
    0010 - 74 d9 c6 cb ce 98 05 94-c1 1e ac df 89 df 40 97   t.............@.
    0020 - 6b 4c 06 c0 9e c4 75 31-81 89 2d ed 52 40 d0 e8   kL....u1..-.R@..
    0030 - 0e 67 cf a1 b3 76 0c a4-73 b2 94 b6 10 9b 44 cb   .g...v..s.....D.
    0040 - fa 15 a6 e7 03 35 e4 a9-e8 23 71 2f 41 37 5b 61   .....5...#q/A7[a
    0050 - 1f 59 df 62 7f bc 1d 81-8f c7 a3 e1 b6 81 76 49   .Y.b..........vI
    0060 - 42 a9 6b 62 76 d9 4e b2-31 7a 80 fa 29 34 53 04   B.kbv.N.1z..)4S.
    0070 - 14 56 79 2f 72 1e 62 e6-35 04 9f b0 95 db a7 85   .Vy/r.b.5.......
    0080 - 8d 69 6b 03 c6 ed 1c eb-a9 57 f1 bc 85 14 b9 b7   .ik......W......
    0090 - 19 f0 69 9e e3 13 aa 46-d5 63 b3 73 9a cc 2a e9   ..i....F.c.s..*.
    00a0 - 1d fc 53 85 09 eb 9a 2b-95 15 63 b4 02 68 44 d9   ..S....+..c..hD.
    00b0 - 86 78 cf 22 ba 12 c4 4b-19 87 3c 87 bf 4b 2b ad   .x."...K..<..K+.

    Start Time: 1655643776
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: 9124FD4EC3CB3583779BE1CB6D922DA543589BD86B2FF687B3E46D6A2B323DBF
    Session-ID-ctx: 
    Resumption PSK: 3B0ACC46949AC36329F70152E4902B9FAC6007B03D0790C205FC5A8A66400639530B9F8A05F8D09B6246E2F4B8BA48E2
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    0000 - 53 50 b1 82 d9 ee 01 10-44 a8 85 19 6c dc a8 44   SP......D...l..D
    0010 - bb a5 c7 c1 4b db de b5-19 5a 88 06 e9 c3 75 04   ....K....Z....u.
    0020 - 1f ce 61 0d cc 40 84 25-8a 45 0d ad a6 03 8b 3b   ..a..@.%.E.....;
    0030 - a7 20 75 33 19 55 73 8b-9e 13 32 ca 5e 1f 91 aa   . u3.Us...2.^...
    0040 - 1c 6a 88 c3 42 3d ec 45-be d7 19 d1 42 5e 8e 35   .j..B=.E....B^.5
    0050 - 5d d4 5c a2 ef aa 0d a1-ba ff 58 17 b2 99 7a 7a   ].\.......X...zz
    0060 - 16 e5 c7 cc 15 cd c9 67-18 cd 51 dc 01 cc f5 4f   .......g..Q....O
    0070 - 18 c3 52 a5 90 0c 28 d1-3d 85 ed 64 8c cf 3d ea   ..R...(.=..d..=.
    0080 - bd f0 44 95 e6 c2 60 ab-a2 4d d9 be 1b a0 89 51   ..D...`..M.....Q
    0090 - 15 56 11 5a 74 53 eb b9-f6 81 c1 05 64 f2 13 e4   .V.ZtS......d...
    00a0 - fa 8e 59 4e b9 7c b4 12-c0 a7 f2 42 ca 7f dd e0   ..YN.|.....B....
    00b0 - 0a d6 71 22 cb a5 1d 61-69 1d db 8f e3 6d f3 52   ..q"...ai....m.R
    00c0 - 2e d3 85 7f ed 97 7f 91-b9 f1 c6 31 11 96 bc 64   ...........1...d

    Start Time: 1655643776
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK
^C
onlylove@ubuntu:~/my/openssl/ca$

2、双向认证

服务端:

openssl s_server -CAfile ca.cer -cert server.cer -key server.key -accept 22580 -Verify 1

客户端:

openssl s_client -CAfile ca.cer -cert client.cer -key client.key -connect 127.0.0.1 -port 22580

服务端测试:

onlylove@ubuntu:~/my/openssl/ca$ openssl s_server -CAfile ca.cer -cert server.cer -key server.key -accept 22580 -Verify 1
verify depth is 1, must return a certificate
Enter pass phrase for server.key:
Using default temp DH parameters
ACCEPT
depth=1 C = CN, ST = SD, L = JN, O 

相关文章