自签名证书与CA签发证书的区别以及如何用openssl库生成自签名证书

        自签名证书(Self-Signed Certificate)与由权威的证书颁发机构(CA)签发的证书在某些方面有所不同。下面我们来详细讨论自签名证书中的域名、签名及其作用。

自签名证书中的域名

  1. 域名的存在
    • 自签名证书可以包含一个或多个域名。这些域名会在证书的“主体(Subject)”字段中列出。
    • 当创建自签名证书时,用户会指定这个证书对应的域名(例如 example.com 或 www.example.com)。如果访问的域名与证书中的域名不匹配,客户端会提示用户进行安全性检查。

签名是什么

  1. 签名的含义

    • 在 SSL/TLS 证书中,签名是用来验证证书的真实性和完整性的一种机制。它允许客户端确认自己所信任的具权威性的CA签发了这个证书。
    • 自签名证书的签名是由证书创建者(通常是拥有该证书的组织)使用自己的私钥对证书内容进行加密生成的。因此,只有持有相应的私钥的人才能生成这种签名。
  2. 签名的功能

    • 验证性:如果某个证书是由受信任的CA签发的,客户端可以使用CA的公钥验证证书的签名,从而信任这个证书。而自签名证书的签名可以被视为对证书自身有效性的一种验证,但不受外部权威机构的信任。
    • 完整性:通过签名,客户端可以确认证书在传输过程中没有被篡改。

自签名证书的用例

  • 开发和测试环境:自签名证书常用于开发和测试环境,因为它们不需要支付费用或配置CA。
  • 内部系统:一些公司在内部网络中也会使用自签名证书,以提高内部通信的安全性。

可信任问题

  • 浏览器警告:当使用自签名证书的网站被访问时,浏览器会提示该证书不受信任,因为没有 CA 的签名。用户必须自行决定是否继续访问该站点。
  • 手动信任:用户可以选择手动将自签名证书添加到其设备的受信任证书列表中,使得浏览器将其视为安全。但这需要用户具备一定的技术知识,并确保证书的来源是可信的。

        生成自签名证书的 OpenSSL 命令 openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes 提供了生成证书所需的主要信息,但并没有直接指定域名。下面是对这个命令的详细解释以及它如何处理域名和签名的。

命令详解

  • openssl req -x509:生成自签名的 X.509 证书。
  • -newkey rsa:4096:生成一个新的 RSA 私钥,长度为 4096 位。
  • -keyout key.pem:将生成的私钥保存到文件 key.pem
  • -out cert.pem:将生成的自签名证书保存到文件 cert.pem
  • -days 365:证书的有效期为 365 天。
  • -nodes:不加密私钥(即不在保存私钥时要求输入密码)。

域名的处理

  1. 域名的指定

    • 该命令在生成证书时会提示用户输入证书的详细信息,包括域名。
    • 在提示“Common Name (e.g. server FQDN or YOUR name) []:”时,用户需要输入要生成证书的域名(例如 example.com 或 www.example.com)。这个域名将作为证书的“Common Name”字段,标识证书的用途。
  2. 其他信息

    • 命令还会提示用户输入其他证书相关的信息,如“Organization Name (e.g., company) []:” 和 “Organizational Unit Name (e.g., section) []:” 等。这些信息通常用于构建证书的主题(Subject)字段。

签名的生成

  1. 签名的含义

    • 生成的自签名证书包含一个签名,这个签名是由证书的私钥对证书内容(包括公钥和其他信息)进行加密生成的。
    • 由于是自签名证书,这个签名是由生成证书的私钥自己生成的,而不是由受信任的 CA 签发的。
  2. 签名的作用

    • 验证完整性:签名保证了证书内容的完整性,客户端可以验证证书是否有被篡改。
    • 验证来源:尽管是自签名证书,用户可以通过检查签名的正确性来确认证书是由预期的私钥生成的。

示例流程

假设你在执行上述命令时,输入了以下信息:

Country Name (2 letter code) []:US
State or Province Name (full name) []:California
Locality Name (eg, city) []:San Francisco
Organization Name (eg, company) []:Example Inc.
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:[email protected]
  1. 生成的 cert.pem 文件将包含一个自签名证书,有效期为 365 天。
  2. 证书中的“Common Name”字段将设置为 example.com,标识这是为 example.com 域名生成的证书。
  3. 证书的签名将由生成的私钥加密,存储在 cert.pem 文件中。

总结

  • 该命令通过提示用户输入证书详细信息来间接指定域名。
  • 生成的证书包含签名,用于验证证书的完整性,但因为不是由受信任的 CA 签发,所以不会被默认信任。

如果你想自动生成包含指定域名的证书,可以使用命令行参数来自动填充这些信息,例如:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/C=US/ST=California/L=San Francisco/O=Example Inc./OU=IT/CN=example.com/[email protected]"

这个命令会自动填充所有证书信息,无需交互式输入。

猜你喜欢

转载自blog.csdn.net/2301_80892630/article/details/143277172