Skip to content

密钥和证书的管理

How do I produce a CA signed public key?

生成自签名证书

生成私钥

下面命令是一个使用 OpenSSL 工具生成 RSA 私钥的命令。这个命令的各个部分具有特定的含义,下面是对这个命令的详细解析:

  • openssl: 这是 OpenSSL 命令行工具的调用方式。OpenSSL 是一个强大的安全套接字层(SSL)和传输层安全(TLS)协议库,同时也包含了大量的加密功能,如生成密钥、证书签名等。
  • genrsa: 这是 OpenSSL 中的一个子命令,用于生成 RSA 私钥。RSA 是一种非对称加密算法,它使用一对密钥:一个公钥和一个私钥。公钥可以公开,而私钥必须保密。
  • -out private.pem: 这个选项指定了输出文件的名称和路径。在这个例子中,生成的 RSA 私钥将被保存到当前目录下的 private.pem 文件中。.pem 扩展名通常用于表示 PEM(Privacy Enhanced Mail)格式的文件,这是一种基于文本的编码方式,用于存储和发送加密材料,如证书和私钥。
  • 2048: 这个数字指定了生成的 RSA 私钥的位长度。位长度是密钥强度的一个指标,较高的位长度意味着更强的安全性,但同时也意味着更高的计算成本。2048 位是当前被广泛认为足够安全的密钥长度之一,适用于大多数应用场景。

综上所述,openssl genrsa -out private.pem 2048 命令的作用是生成一个 2048 位的 RSA 私钥,并将这个私钥保存到当前目录下的 private.pem 文件中。这个私钥可以用于多种安全操作,如 SSL/TLS 加密、数字签名等。

需要注意的是,为了安全起见,生成的私钥文件(如 private.pem)应该被妥善保管,避免未经授权的访问。同时,在不再需要时,应该安全地删除或销毁这些私钥文件,以防止潜在的安全风险。

bash
openssl genrsa -out private.pem 2048

生成公钥

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

生成CSR

  • 在生成CSR(Certificate Signing Request,证书签名请求)文件时需要使用私钥,这主要是因为CSR文件包含了公钥以及请求者的身份信息,并且这些信息需要被私钥进行数字签名,以确保CSR的完整性和真实性。
  • 在使用OpenSSL命令生成CSR(Certificate Signing Request,证书签名请求)文件时,实际上并不需要直接指定公钥文件,这是因为公钥是在生成私钥的过程中自动生成的,并与私钥形成一对。
bash
openssl req -new -key private.pem -out certificate.csr

生成自签名证书

下面命令是使用 OpenSSL 工具从证书签名请求(CSR)文件自签名生成一个 X.509 证书的命令。这个命令的各个部分具有特定的含义,下面是对这个命令的详细解析:

  • openssl x509: 这是 OpenSSL 命令行工具中用于处理 X.509 证书相关操作的子命令。X.509 是一种广泛使用的公钥证书格式,它定义了证书中信息的结构和编码方式。
  • -req: 这个选项告诉 OpenSSL 从一个证书签名请求(CSR)文件中读取数据,并生成一个证书。这是必需的,因为我们要从 CSR 转换到证书。
  • -days 365: 这个选项指定了证书的有效期,单位是天。在这个例子中,证书将被设置为在生成之日起 365 天后过期。你可以根据需要调整这个数字。
  • -in certificate.csr: 这个选项指定了输入文件的名称和路径,即 CSR 文件的路径。在这个例子中,CSR 文件名为 certificate.csr,并且位于当前目录下。
  • -signkey private.pem: 这个选项指定了用于签名的私钥文件的名称和路径。在这个例子中,私钥文件名为 private.pem,并且也位于当前目录下。由于这是一个自签名证书,因此我们将使用与生成 CSR 时相同的私钥来签名证书。
  • -out certificate.crt: 这个选项指定了输出文件的名称和路径,即生成的证书文件的路径。在这个例子中,证书文件将被保存为 certificate.crt,并位于当前目录下。.crt 扩展名通常用于表示证书文件。

执行这个命令后,OpenSSL 将使用指定的私钥对 CSR 文件中的公钥和请求者信息进行签名,并生成一个包含这些信息的 X.509 证书。这个证书将包括公钥、证书持有者的信息(如组织名称、域名等)、证书的有效期以及签名等。

需要注意的是,自签名证书通常仅用于测试和开发环境,因为它们不是由受信任的证书颁发机构(CA)签发的。在生产环境中,你应该使用由受信任的 CA 签发的证书来确保通信的安全性。然而,在某些情况下,如内部网络或私有云服务中,自签名证书仍然可以被接受和使用。

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

验证自签名证书

bash
openssl verify certificate.crt

查看x509证书信息,例如到期信息

bash
openssl x509 -in certificate.crt -text -noout

使用一行命令生成私钥和CSR证书

bash
openssl req -out certificate.csr -new -nodes -newkey rsa:2048 -keyout private.pem

使用openSSL导出baidu证书

bash
true | openssl s_client -connect www.baidu.com:443 2>/dev/null | openssl x509

使用OpenSSL显示证书签名链

bash
openssl s_client -connect www.baidu.com:443 -showcerts

生成ssh服务的公钥和私钥

Generating Public and Private Keys with openssl.exe

生成私钥

bash
openssl genrsa -out private.key 1024

生成PEM格式公钥

bash
openssl rsa -in private.key -out public.key -pubout -outform PEM

如果需要OPENSSH格式公钥,使用下面命令生成

参考链接

bash
ssh-keygen -f private.key -y > public.key

使用自签名CA证书签发其他证书

提示:todo 实验未成功,使用浏览器访问openresty时报告证书域名非法错误

生成CA私钥

bash
openssl genrsa -out ca.key 2048

生成自签名CA证书

这里的命令解释如下:

  • openssl genrsa -out ca.key 2048:生成一个新的2048位RSA私钥,并将其保存到ca.key文件中。这个私钥将用于签署CA证书。
  • openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/C=CN/ST=Guangdong/L=Guangzhou/O=MyCompany/OU=IT/CN=MyCompany Root CA"
  • -new:指示OpenSSL生成一个新的证书请求。但在这里,由于我们要生成自签名证书,所以这个选项实际上与-x509结合使用时,意味着我们将直接生成证书而不是CSR。
  • -x509:指示OpenSSL生成一个自签名的X.509证书,而不是生成CSR。
  • -days 3650:指定证书的有效期为3650天(大约10年)。你可以根据需要调整这个数字。
  • -key ca.key:指定用于签名的私钥文件。
  • -out ca.crt:指定输出的证书文件名。
  • -subj:允许你直接指定证书的主题信息,而不是通过交互式提示输入。这里的主题信息包括国家(C)、省份(ST)、城市(L)、组织(O)、组织单位(OU)和通用名称(CN),这些都是证书中的标准字段。

完成这些步骤后,你将拥有一个名为ca.crt的自签名CA证书和一个名为ca.key的私钥文件。这个CA证书可以被用来签署其他证书,如服务器证书、客户端证书等。

请注意,自签名CA证书在默认情况下不会被客户端或浏览器信任,因为它们不是由公认的证书颁发机构签发的。因此,如果你打算在生产环境中使用自签名证书,你可能需要手动将CA证书添加到客户端或服务器的信任存储中。

bash
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/C=CN/ST=Guangdong/L=Guangzhou/O=MyCompany/OU=IT/CN=MyCompany Root CA"

使用自定义CA证书签发其他证书

  • 生成其他证书私钥

    bash
    openssl genrsa -out server.key 2048
  • 生产其他证书CSR

    bash
    openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Shanghai/L=Shanghai/O=Dell/OU=IT Support/CN=www.example.com"
  • 使用自定义CA证书签发其他证书

    这里的命令解释如下:

    • -req -in server.csr:指定输入文件为CSR文件。
    • -CA ca.crt:指定CA证书文件。
    • -CAkey ca.key:指定CA私钥文件。
    • -CAcreateserial:如果尚未存在,则创建并更新序列号文件(通常是ca.srl)。序列号用于跟踪由CA签发的证书。
    • -out server.crt:指定输出文件,即新签发的证书。
    • -days 365:指定证书的有效期。
    bash
    openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365
  • 使用OpenSSLx509命令来验证新签发的证书是否由自定义CA证书正确签发,注意:查看输出中的“Issuer”字段,它应该与自定义CA证书的主题相匹配。

    bash
    openssl x509 -in server.crt -text -noout

现在,你可以将server.crt(服务器证书)和server.key(服务器私钥)一起用于SSL/TLS配置中,例如Web服务器或邮件服务器。