自签名证书(Self-Signed Certificate)与由权威的证书颁发机构(CA)签发的证书在某些方面有所不同。下面我们来详细讨论自签名证书中的域名、签名及其作用。
自签名证书中的域名
- 域名的存在:
- 自签名证书可以包含一个或多个域名。这些域名会在证书的“主体(Subject)”字段中列出。
- 当创建自签名证书时,用户会指定这个证书对应的域名(例如
example.com
或www.example.com
)。如果访问的域名与证书中的域名不匹配,客户端会提示用户进行安全性检查。
签名是什么
-
签名的含义:
- 在 SSL/TLS 证书中,签名是用来验证证书的真实性和完整性的一种机制。它允许客户端确认自己所信任的具权威性的CA签发了这个证书。
- 自签名证书的签名是由证书创建者(通常是拥有该证书的组织)使用自己的私钥对证书内容进行加密生成的。因此,只有持有相应的私钥的人才能生成这种签名。
-
签名的功能:
- 验证性:如果某个证书是由受信任的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
:不加密私钥(即不在保存私钥时要求输入密码)。
域名的处理
-
域名的指定:
- 该命令在生成证书时会提示用户输入证书的详细信息,包括域名。
- 在提示“Common Name (e.g. server FQDN or YOUR name) []:”时,用户需要输入要生成证书的域名(例如
example.com
或www.example.com
)。这个域名将作为证书的“Common Name”字段,标识证书的用途。
-
其他信息:
- 命令还会提示用户输入其他证书相关的信息,如“Organization Name (e.g., company) []:” 和 “Organizational Unit Name (e.g., section) []:” 等。这些信息通常用于构建证书的主题(Subject)字段。
签名的生成
-
签名的含义:
- 生成的自签名证书包含一个签名,这个签名是由证书的私钥对证书内容(包括公钥和其他信息)进行加密生成的。
- 由于是自签名证书,这个签名是由生成证书的私钥自己生成的,而不是由受信任的 CA 签发的。
-
签名的作用:
- 验证完整性:签名保证了证书内容的完整性,客户端可以验证证书是否有被篡改。
- 验证来源:尽管是自签名证书,用户可以通过检查签名的正确性来确认证书是由预期的私钥生成的。
示例流程
假设你在执行上述命令时,输入了以下信息:
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]
- 生成的
cert.pem
文件将包含一个自签名证书,有效期为 365 天。 - 证书中的“Common Name”字段将设置为
example.com
,标识这是为example.com
域名生成的证书。 - 证书的签名将由生成的私钥加密,存储在
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]"
这个命令会自动填充所有证书信息,无需交互式输入。