Self-Signed Certificate

Table of Contents

自签名证书(Self-Signed Certificate)本质上并不依赖于外部的证书颁发机构(CA),因为它本身就是自己的 CA。换句话说,自签名证书的签发者(Issuer)和使用者(Subject)是同一个实体。


自签名证书的特点

  1. Issuer 与 Subject 相同

    • 自签名证书自己签署自己,所以在证书的 IssuerSubject 字段中,都会看到相同的内容。
    • 示例:
      Issuer: CN=MyRootCA, O=My Organization, C=US
      Subject: CN=MyRootCA, O=My Organization, C=US
  2. 没有外部验证

    • 它的合法性完全依赖于你自己信任它,而不是通过第三方 CA 的认证。
    • 使用时需要将自签名证书显式添加到“受信任证书”列表中。
  3. 用途

    • 开发、测试环境。
    • 小型闭环系统(如内网)。
    • 为 CA 系统创建根证书(自签名证书可以成为其他证书的信任根)。

自签名证书的 CA 功能

一个自签名证书可以充当根 CA 证书,从而签发其他子证书(如服务器证书)。具体步骤如下:

  1. 生成自签名证书

    • 使用 openssl 或类似工具生成密钥对。
    • 自己使用私钥对证书内容进行签名,生成自签名证书。
  2. 签发其他证书

    • 自签名证书作为“CA”,用它的私钥签署 CSR(证书签名请求),从而生成子证书。

如何生成自签名证书

以下以 OpenSSL 为例,生成一个自签名证书:

步骤 1:生成私钥

openssl genrsa -out myrootca.key 2048
  • 生成一个 2048 位的 RSA 私钥文件 myrootca.key

步骤 2:生成自签名证书

openssl req -x509 -new -nodes -key myrootca.key -sha256 -days 3650 -out myrootca.crt
  • 参数说明:

    • -x509: 生成自签名证书。
    • -new: 创建新证书。
    • -key: 使用之前生成的私钥签署证书。
    • -days 3650: 设置证书有效期为 10 年。
    • -out: 输出自签名证书文件 myrootca.crt
  • 运行时会提示输入证书信息:

    Country Name (2 letter code) [AU]:US
    State or Province Name (full name) [Some-State]:California
    Locality Name (eg, city) []:San Francisco
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization
    Organizational Unit Name (eg, section) []:IT Department
    Common Name (e.g. server FQDN or YOUR name) []:MyRootCA
    Email Address []:admin@example.com

如何验证和使用自签名证书

验证自签名证书

  • 自签名证书不依赖其他 CA,因此没有“证书链”。
  • 可以通过以下命令验证:
    openssl verify -CAfile myrootca.crt myrootca.crt

    输出:

    myrootca.crt: OK

信任自签名证书

  • 要在系统或应用中使用自签名证书,必须将它添加到“受信任的根证书”列表中。
    • Linux:
    • myrootca.crt 复制到 /etc/ssl/certs/ 并运行 update-ca-certificates
    • Windows:
    • 使用 mmc 工具导入证书到“受信任的根证书颁发机构”。
    • 浏览器:
    • 手动导入到浏览器的“证书管理”中。

签发其他证书

使用自签名证书作为 CA,可以签发子证书。以下是简单流程:

  1. 生成服务器私钥和 CSR

    openssl genrsa -out server.key 2048
    openssl req -new -key server.key -out server.csr
  2. 签署子证书

    openssl x509 -req -in server.csr -CA myrootca.crt -CAkey myrootca.key -CAcreateserial -out server.crt -days 365 -sha256
    • -CA myrootca.crt: 指定 CA 证书。
    • -CAkey myrootca.key: 指定 CA 的私钥。
    • -CAcreateserial: 自动生成序列号文件 myrootca.srl

自签名证书的局限性

  1. 不适用于生产环境

    • 因为不被公共 CA 信任,浏览器或操作系统会显示“不安全连接”的警告。
  2. 需手动管理信任

    • 任何使用该证书的系统都必须手动导入并信任它。
  3. 易遭伪造

    • 缺乏第三方验证,自签名证书不提供真正的身份验证。

总结

  • 自签名证书本身就充当“CA 证书”,无需额外的 CA 支持。
  • 适用于测试或封闭环境,开发者可以轻松生成和使用。
  • 若需要在生产环境中使用,推荐使用公共 CA 签发的受信任证书。

如果还有更多问题或需要具体指导,请随时提问!

Comments |0|

Legend *) Required fields are marked
**) You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Category: 似水流年