1. 初衷:为什么需要创建自签名CA证书?

除了开篇引言中提到的学习研究用途外,自签名证书也常见于以下三种场景:

  • 开发和测试环境:这类环境通常不需要使用全球公认的第三方CA证书,创建自签名CA证书就可以避免依赖外部CA,简化证书管理流程,并且可以快速生成和测试证书。

  • 企业内部网络:自签名CA证书可以用于验证内部设备的身份,确保数据传输的安全性。例如,在VPN网关、服务器和客户端之间建立安全连接时,使用自签名CA证书可以有效防止中间人攻击。

  • 小型企业/个人项目:对于一些小型企业或个人项目,购买第三方CA证书可能成本较高。在这种情况下,创建自签名CA证书可以节省费用,同时满足基本的安全需求。

2. 准备工作

首先确保系统上已安装了 OpenSSL。大多数现代 Linux 发行版都已经预装了 OpenSSL。可以通过命令openssl version来确认是否已经安装了OpenSSL。

如何通过OpenSSL来创建自签名的CA证书?-LMLPHP

如果没有安装,可以通过包管理器进行安装。

  • 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主要用于密钥交换和数字签名的管理,而不是加密。

如何通过OpenSSL来创建自签名的CA证书?-LMLPHP

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来创建自签名的CA证书?-LMLPHP

具体命令参数说明如下:

  • 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查看证书详情。

如何通过OpenSSL来创建自签名的CA证书?-LMLPHP

从上图我们可以看出X509v3 Subject Key IdentifierX509v3 Authority Key Identifier的值是相同的,前者是此证书的唯一编号,后者是签发此证书的证书的唯一编号,再结合 X509v3 Basic Constraints 的 CA:TRUE 字样,可以判定出当前证书是一个自签名的CA根证书。

现在,由此证书签名的任何证书都将具有相同的颁发者详细信息。

Issuer: C=CN, CN=FullStackSecurity, O=FSS, L=HZ, ST=ZheJiang

4. 安装CA证书

计算机将根据其内部的信任存储(通常是操作系统或浏览器内置的受信任证书列表)来判断证书是否来自一个可信赖的来源。只有当证书链中的所有证书都被认为是可信的,并且最终指向了一个本地信任存储中的根证书时,整个证书链才会被认为可信。

如何通过OpenSSL来创建自签名的CA证书?-LMLPHP

如果想让上面创建的CA证书以及后续用此证书颁发其他数字证书都被计算机信任,我们需要将此CA根证书安装到信任列表中。比如在MAC电脑上直接双击即可完成安装。

如何通过OpenSSL来创建自签名的CA证书?-LMLPHP

从上图中可以看到,上面生成的CA根证书已经安装到了系统中。此后由该CA根证书颁发的其他证书均会被系统信任。

5. 写在最后

本文主要介绍了如何利用OpenSSL生成自签名的CA根证书,接下来博主会继续发文介绍:

  • 如何利用该根证书签署其他证书(即子证书),包括服务器证书和其他类型的证书;
  • 介绍客户端验证整个证书链的详细过程。

如何通过OpenSSL来创建自签名的CA证书?-LMLPHP

11-24 20:46