SSL 自定义证书创建过程

1、生成自签名根证书和私钥

1.1 生成根证书

1.1.1生成根证书私钥

首先,生成一个自签名的根证书和私钥。这个根证书将作为信任锚(Trust Anchor),客户端会信任由这个根证书签署的所有证书。

openssl genrsa -out rootCA.key 2048

参数解释:

  • openssl: OpenSSL工具的主命令。
  • genrsa: 生成RSA密钥对的命令。
  • -out rootCA.key: 指定输出文件名为rootCA.key,这是生成的私钥文件。
  • 2048: 指定密钥的长度为2048位。

1.2 生成根证书 

创建openssl.cnf 文件,文件内容如下:

[ req ]
default_bits       = 2048
default_keyfile    = rootCA.key
distinguished_name = req_distinguished_name
prompt             = no

[ req_distinguished_name ]
C            = CN
ST           = Shanghai
L            = Shanghai
O            = CodeProject
OU           = Development
CN           = CodeProject Root CA

1.2.1生成根证书rootCA.crt 

命令如下:

openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 36500 -out rootCA.crt -config openssl.cnf

 解释

  • -x509:表示生成自签名证书(而不是证书签名请求)。
  • -new:表示生成新证书。
  • -nodes:表示不加密私钥文件(即不需要密码保护)。
  • -key rootCA.key:指定私钥文件为rootCA.key
  • -sha256:使用SHA-256哈希算法。
  • -days 36500:指定证书的有效期为36500天(约100年)。
  • -out rootCA.crt:指定输出的证书文件名为rootCA.crt
  • -config openssl.cnf:指定使用openssl.cnf配置文件中的信息。

1.3为什么根证书不要CSR 文件 

在生成根证书(Root CA 证书)时,不需要 CSR(证书签名请求)文件,这是因为根证书是自签名的。具体来说,根证书的生成过程和普通证书不同,以下是详细解释:

什么是根证书?

根证书是公钥基础设施(PKI)中的顶级证书,它用来签署其他证书,包括中间证书和最终用户证书。根证书通常由证书颁发机构(CA)生成和自签名。

自签名证书和CSR的区别

1. 自签名证书

自签名证书是由自身私钥签名的证书。因为它是信任链的起点,所以不需要外部的证书颁发机构(CA)来签署。这就是为什么在生成根证书时不需要 CSR 文件的原因。

生成自签名根证书的过程如下:

  1. 生成一对密钥(公钥和私钥)。
  2. 使用私钥签署生成的证书。

2. 生成服务端证书

2.1生成服务端私钥

openssl genrsa -out server.key 2048

 

创建OpenSSL配置文件

创建一个名为openssl.cnf的文件,并添加以下内容:

[ req ]
default_bits       = 2048
default_keyfile    = server.key
distinguished_name = req_distinguished_name
prompt             = no

[ req_distinguished_name ]
C            = CN
ST           = Shanghai
L            = Shanghai
O            = CodeProject
OU           = Development
CN           = example.com
生成CSR

确保server.key文件和openssl.cnf文件在同一个目录下,然后运行以下命令:

openssl req -new -config openssl.cnf -key server.key -out server.csr

使用根证书签署服务端证书

openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt -days 365 -sha256

参数解释:

  • x509: 用于处理X.509证书的命令。
  • -req: 表示输入是一个证书签名请求(CSR)。
  • -in server.csr: 指定输入文件名为server.csr,这是前面生成的CSR文件。
  • -CA rootCA.crt: 指定用作CA的根证书文件rootCA.crt
  • -CAkey rootCA.key: 指定用于签署的根证书私钥文件rootCA.key
  • -CAcreateserial: 如果没有rootCA.srl文件,创建一个新的序列号文件。
  • -out server.crt: 指定输出文件名为server.crt,这是生成的服务端证书。
  • -days 365: 证书的有效期为365天(1年)。
  • -sha256: 使用SHA-256哈希算法。

类比解释:信任关系

假设有一个大公司(根证书),公司里有一个高管(服务端证书),还有许多员工(客户端)。公司决定了一套信任规则来管理所有员工的工作和身份验证。

  1. 大公司发布了自己的信任凭证(根证书):

    • 大公司自己发布了一个“公司章”(自签名证书),所有员工都认可这个公司章。
    • 这个公司章表示大公司本身是可信的,不需要别人来验证它,因为所有人都知道它并信任它。
  2. 高管获得了公司的信任凭证(服务端证书):

    • 高管需要一个身份验证(服务端证书),于是公司用自己的公司章给高管发布了一个高管身份验证文件。
    • 这个文件上盖有公司章(根证书签名),所以所有员工都可以验证这个文件的真实性。
  3. 员工信任公司的信任凭证(客户端信任根证书):

    • 公司在入职培训时告诉所有员工,任何带有公司章的文件都是可信的。
    • 因此,员工会把公司章(根证书)存储在他们的记忆中,并用它来验证任何带有公司章的文件。

更新服务端证书

现在,高管的身份验证文件(服务端证书)即将过期,需要更新:

  1. 高管申请新文件

    • 高管向公司申请一个新的身份验证文件(新的服务端证书)。
    • 公司用自己的公司章(根证书)再次签署并发布新的身份验证文件。
  2. 员工验证新的高管文件

    • 新的身份验证文件依然带有公司章(根证书签名)。
    • 员工使用存储在他们记忆中的公司章(客户端信任的根证书)来验证新的文件。

关键点

  • 根证书(公司章)始终是相同的:根证书是公司自己签发并受信任的,所以它在信任链的最顶端。
  • 签名链的完整性:无论高管的身份验证文件(服务端证书)更新多少次,只要它是由根证书(公司章)签署的,员工(客户端)就能验证其真实性。
  • 客户端只需要信任根证书:客户端(员工)只需要一次性信任根证书(公司章)。之后,任何由这个根证书签署的证书(身份验证文件)都能被验证成功。

总结

由根证书签发的服务端证书,即使更新了,客户端依然能验证成功的原因在于:

  • 客户端只需要信任一次根证书。
  • 任何由根证书签署的证书,都能被客户端验证。
  • 更新后的服务端证书依然由同一个根证书签署,确保了信任链的完整性。

通过这个类比,您可以更直观地理解根证书和服务端证书之间的信任关系,以及为什么客户端在根证书不变的情况下可以持续信任更新后的服务端证书。

 

 

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要使用 OpenSSL 生成一个自定义SSL 证书,你可以按照以下步骤进行: 1. 安装 OpenSSL 工具: 如果你使用的是 Linux 或 macOS,可以使用系统的包管理器来安装 OpenSSL。如果你使用的是 Windows,则可以从 OpenSSL 的官方网站上下载 Windows 版本的 OpenSSL 工具。 2. 生成 SSL 私钥: 使用以下命令生成一个 SSL 私钥文件(例如,server.key): ``` openssl genrsa -out server.key 2048 ``` 这将生成一个 2048 位的 RSA 密钥对,其中 server.key 是私钥文件的名称。请注意,这个私钥文件应该只能被服务器使用,因此请妥善保管它。 3. 生成证书签名请求(CSR): 使用以下命令生成一个 CSR 文件(例如,server.csr): ``` openssl req -new -key server.key -out server.csr ``` 这将提示你输入一些有关证书的信息,例如国家/地区、州/省、城市、组织和 Common Name(通用名称)。请务必确保在 Common Name 中输入与你要使用该证书的域名完全一致的名称。 4. 生成自签名证书: 使用以下命令生成一个自签名证书文件(例如,server.crt): ``` openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt ``` 这将使用 CSR 文件和私钥文件来生成一个有效期为 365 天的自签名证书文件。请注意,这种自签名证书只适用于测试或开发环境,因为它没有受信任的根证书机构签名。 5. 配置 NGINX: 将生成的 server.key 和 server.crt 文件复制到你要使用 SSL 的 NGINX 服务器上,并将以下内容添加到 NGINX 的配置文件中: ``` server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/server.crt; ssl_certificate_key /path/to/server.key; # Other SSL configuration options... } ``` 这将配置 NGINX 使用你生成的 SSL 证书来加密 HTTPS 流量。 注意:以上命令中的示例文件名仅供参考。在实际使用时,你应该为文件选择一个具有描述性的名称,并将路径和文件名替换为你实际使用的值。 ### 回答2: 要使用OpenSSL来生成NGINX SSL的自定义证书,可以按照以下步骤进行操作: 1. 安装OpenSSL:首先,确保计算机上已经安装了OpenSSL,如果没有安装,可以从OpenSSL官方网站下载并安装适合您操作系统的版本。 2. 创建私钥:使用以下命令生成一个私钥文件: `openssl genrsa -out private.key 2048` 这将创建一个2048位的RSA私钥,并将其保存在名为private.key的文件中。 3. 创建证书签名请求(CSR):使用以下命令生成一个CSR文件: `openssl req -new -sha256 -key private.key -out csr.csr` 这将生成一个证书签名请求文件csr.csr。在生成过程中,您需要提供一些关于您的域名和组织的信息。 4. 生成证书:在生成CSR文件后,您可以使用以下命令生成自定义证书: `openssl x509 -req -in csr.csr -signkey private.key -out certificate.crt -days 365` 这将使用私钥和CSR文件来生成一个有效期为365天的证书文件certificate.crt。 5. 配置NGINX:将生成的私钥和证书文件复制到NGINX的SSL配置目录中,并在NGINX配置文件中指定这些文件的路径和名称。 6. 重启NGINX:保存并关闭NGINX配置文件后,使用以下命令重启NGINX服务器以使更改生效: `nginx -s reload` 完成上述步骤后,您将成功生成并安装了自定义的NGINX SSL证书。这将使您的网站能够通过HTTPS进行安全的加密通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值