1. 初衷:为什么需要创建自签名CA证书?
除了开篇引言中提到的学习研究用途外,自签名证书也常见于以下三种场景:
-
开发和测试环境:这类环境通常不需要使用全球公认的第三方CA证书,创建自签名CA证书就可以避免依赖外部CA,简化证书管理流程,并且可以快速生成和测试证书。
-
企业内部网络:自签名CA证书可以用于验证内部设备的身份,确保数据传输的安全性。例如,在VPN网关、服务器和客户端之间建立安全连接时,使用自签名CA证书可以有效防止中间人攻击。
-
小型企业/个人项目:对于一些小型企业或个人项目,购买第三方CA证书可能成本较高。在这种情况下,创建自签名CA证书可以节省费用,同时满足基本的安全需求。
2. 准备工作
首先确保系统上已安装了 OpenSSL。大多数现代 Linux 发行版都已经预装了 OpenSSL。可以通过命令openssl version
来确认是否已经安装了OpenSSL。
如果没有安装,可以通过包管理器进行安装。
- Debian/Ubuntu:
sudo apt-get install openssl
- CentOS/RHEL:
sudo yum install openssl
3. 具体步骤
使用OpenSSL创建自签名证书的可分为两大步,具体如下。
3.1. 生成CA私钥
使用openssl genpkey
命令生成RSA算法的私钥文件。例如,可以使用以下命令生成一个密钥长度为2048 位的RSA私钥,并将其保存为ca_private.key文件。
openssl genpkey -algorithm RSA -out ca_private.key
这个私钥会用于后续的证书签名。当然以上命令中也可以使用ECC算法。实现相同的安全级别所需的RSA和ECC密钥长度如下表所示,可见ECC密钥更短。然而,ECC主要用于密钥交换和数字签名的管理,而不是加密。
3.2. 使用生成的CA私钥创建CA证书
使用openssl req -x509
命令来生成证书,并设置有效期为3650天,同时指定主题信息(如CN、O等)。命令如下:
openssl req -new -x509 -key ca_private.key -out ca_certificate.crt -days 3650 -subj "/C=CN/CN=FullStackSecurity/O=FSS/L=HZ/ST=ZheJiang"
这个命令会生成一个有效期为十年的自签名证书ca_certificate.crt,证书为PEM格式。
具体命令参数说明如下:
- openssl req: OpenSSL用于处理证书签名请求(CSR,certificate signing request)的命令。
- new: 表示创建新的CSR。
- x509: 表示生成X.509格式的证书。
- days 3650: 表示证书的有效期为10年。
- key ca_private.key: 设置生成证书的私钥文件为 ca_private.key。
- **subj “/C=CN/CN=FullStackSecurity/O=FSS/L=HZ/ST=ZheJiang” **: 用于设置证书主题信息,主要字段含义如下:
- Country ©:个体所在地的国家代码。
- Common Name (CN):通常是个体的名称或主机名。
- Organization (O):个体所属的组织。
- Locality (L):个体所在地的城市或地理位置。
- State (ST):个体所在地的州或省份。
执行命令openssl x509 -in ca_certificate.crt -text -noout
查看证书详情。
从上图我们可以看出X509v3 Subject Key Identifier
和 X509v3 Authority Key Identifier
的值是相同的,前者是此证书的唯一编号,后者是签发此证书的证书的唯一编号,再结合 X509v3 Basic Constraints 的 CA:TRUE 字样,可以判定出当前证书是一个自签名的CA根证书。
现在,由此证书签名的任何证书都将具有相同的颁发者详细信息。
Issuer: C=CN, CN=FullStackSecurity, O=FSS, L=HZ, ST=ZheJiang
4. 安装CA证书
计算机将根据其内部的信任存储(通常是操作系统或浏览器内置的受信任证书列表)来判断证书是否来自一个可信赖的来源。只有当证书链中的所有证书都被认为是可信的,并且最终指向了一个本地信任存储中的根证书时,整个证书链才会被认为可信。
如果想让上面创建的CA证书以及后续用此证书颁发其他数字证书都被计算机信任,我们需要将此CA根证书安装到信任列表中。比如在MAC电脑上直接双击即可完成安装。
从上图中可以看到,上面生成的CA根证书已经安装到了系统中。此后由该CA根证书颁发的其他证书均会被系统信任。
5. 写在最后
本文主要介绍了如何利用OpenSSL生成自签名的CA根证书,接下来博主会继续发文介绍:
- 如何利用该根证书签署其他证书(即子证书),包括服务器证书和其他类型的证书;
- 介绍客户端验证整个证书链的详细过程。