如何生成 CA 签名的公钥?

信息安全 证书 公钥基础设施 证书颁发机构 电子签名
2021-08-19 08:57:45

我需要让其他人用我的公钥加密秘密数据,然后我可以用我的私钥解密。我用 OpenSSL 制作了一个 RSA 私钥/公钥对,给了他们公钥,一切正常。

最近,有人指出我们可能会受到中间人攻击,坏人会接受我的公钥并将他们自己的公钥传递给另一方。然后另一方将尽职尽责地加密秘密数据,将其传递给 MITM,后者将对其进行解密,用我的公钥对其进行重新加密,然后再将其传递给我,而我并不聪明。推荐的解决方案是让我的公钥在传递之前由对方信任的 CA 签名。

作为一个实验,我制作了一个 CSR,我可以用我自己的 CA 签名,但生成的证书也包含(加密的)私钥。我宁愿不将我的密钥传递给其他任何人,无论是否加密。

有没有办法让我的公钥签名?

3个回答

签署公钥实际上是一种证书。这些是我生成公钥证书的步骤,我可以分发给其他人,以便他们可以与我安全地通信:

设置

  1. 生成私钥:

    openssl genrsa -out private.pem 2048

  2. 生成公钥:

    openssl rsa -in private.pem -outform PEM -pubout -out public.pem

  3. 创建 CSR(证书签名请求)

    openssl req -new -key private.pem -out certificate.csr

  4. 创建自签名证书(您可以共享此证书)

    openssl x509 -req -days 365 -in certificate.csr -signkey private.pem -out certificate.crt

加密

openssl rsautl -encrypt -inkey private.pem -keyform PEM -in data > encrypted_data

解密

  1. 从证书中提取公钥

    openssl x509 -pubkey -noout -in certificate.crt > certpubkey.pem

  2. 解密数据

    openssl rsautl -decrypt -inkey certpubkey.pem -keyform PEM -pubin -in encrypted_data > 数据

如果您打算让您的密钥由 CA 签名,您必须将您的 CSR 文件(和一些现金)发送给您选择的 CA,他们会给您提供您可以使用的证书,而不是我的自签名证书在上面的步骤中提到。

该过程应涉及三个实体:

  1. 发件人——你
  2. 接收者——用户
  3. 证书颁发机构 - 受信任的第三方(或者在某些情况下是您)

保证事情安全的过程是“发件人”,生成一对密钥(公钥和私钥)。我喜欢将它们称为钥匙和锁以获得更好的视觉效果。密钥(私人)不应该离开发件人的财产,这就是为什么它被称为私人密钥。

然后,发送者使用公钥(锁)生成证书签名请求(CSR),并将其转发给证书颁发机构(受信任的第三方),证书颁发机构使用证书颁发机构私钥对公钥(锁)进行签名。

证书颁发机构现在将由证书颁发机构私钥签名的“发件人”公钥发送回“发件人”,这就是现在的证书。

接收者获取证书(让我们说通过网络浏览器)并使用“发送者”和“接收者”都拥有的证书颁发机构公钥验证它是否有效,因为它们是受信任的第三方。一旦验证证书中的公钥可以被信任* 为“发件人的”公钥不变。

如果“接收方”需要向“发送方”发送数据,他们将使用可信证书中的公钥将数据加密为密文,然后将其传递给“发送方”。由于只有“发件人”的私钥才能解密用“发件人”公钥加密的密文,中间的任何人基本上都有无用的乱码。

在某些情况下,“发件人”可以通过使用不同的密钥集签署自己的 CSR 或使用相同的密钥集进行自签名来生成他/她自己的证书颁发机构。在这种情况下,双方需要通过安全通道知道“发件人”的公钥才能获得信任。在软件中,您可以将证书包含在可用作受信任第三方的可交付成果中。

*trusted 仅在证书颁发机构维护 CRL(证书撤销列表)并且各方监控该列表以确保颁发的证书没有被泄露时才有效。存在证书颁发机构受到损害并且私钥泄露的情况,当这种情况发生时,受损害代理可以使用私钥生成模仿“发件人”的受信任证书,在这种情况下,MITM 是可能的,并且 MITM 可以从“发送者”接收数据解密、存储、使用看起来像“发送者”的有效证书加密,然后将其传递给“接收者”。

从您创建的 CA 证书副本中取出加密的私钥(将其提供给他人时)。私钥不需要存在,除非您打算使用它来签署包含另一个公钥的证书。

当您通过公钥发送时,请改为发送整个证书(私钥除外),使用关联的 CA 私钥签名。为了检查其中公钥的有效性,您需要根据加密哈希(使用 CA 的私钥加密)检查证书的哈希。这是使用 CA 的公钥解密的。如果解密成功并且哈希与证书的哈希匹配,那么证书内部的信息是可以信任的。

它还不仅仅是加密,例如重放攻击,其中攻击者发送先前保存的加密数据。TLS 涵盖的范围远远超出普通人的想象,因此绝对不建议实施类似的系统。尽可能使用 TLS 来处理任何私有的内容。