自签名证书 - 它是如何工作的

信息安全 tls 证书 公钥基础设施 证书颁发机构 电子签名
2021-08-12 23:02:59

我是 SSL/数字证书/签名的新手。
我所知道的是必须使用公钥验证/解密数字签名。

因此,必须使用安装在大多数浏览器中的 CA 公钥来验证/解密由 CA 签名的证书。


  1. 但是自签名证书呢?客户端如何获取公钥来验证/解密自签名证书?

    这是浏览器会提示证书来自不受信任的来源并要求客户端信任它的场景吗?

    通过信任,这是否意味着不再验证证书的数字签名?并且直接使用证书?


  1. http://webdesign.about.com/od/ssl/ht/new_selfsigned.htm

    在上面的链接中,“服务器密钥”是私钥还是公钥?似乎在整个证书生成过程中都使用了“服务器密钥”。

    我原以为“公钥”将存储在证书中,证书将由私钥签名。

3个回答

要了解自签名证书,首先我们需要了解证书颁发机构(CA)的作用。我将在 Web 服务器和浏览器的上下文中进行解释。

证书颁发机构(CA)在 HTTPS 中的作用:

HTTPS 采用公钥加密技术,它使用密钥对来加密和解密内容。密钥对由一个在数学上相关的公钥和一个私钥组成。打算与浏览器安全通信的 Web 服务器可以分发公钥,但必须对私钥保密。

现在的问题是浏览器不能确定地知道网络服务器用于加密的密钥实际上属于网络服务器。监视 Web 服务器和浏览器之间的通信通道的另一方可能替换了不同的密钥。证书颁发机构 (CA) 的概念已经发展以帮助解决这个问题。证书颁发机构 (CA) 是可信的第三方,它建立公钥的完整性和所有权。CA 通过使用其私钥签署证书(Web 服务器的公钥)来完成此操作。浏览器内置了知名 CA 的公钥,并使用这些公钥来验证证书。

自签名证书:

在自签名证书的情况下,网络服务器会签署自己的证书,而不是让第三方 CA 签署。换句话说,网络服务器本身作为自己的 CA。OpenSSL 可用于生成自签名证书。

如果是自签名证书,浏览器(例如 Chrome)将无法验证证书,因此会报错。为了解决这个问题,您可以在浏览器中安装自签名 CA 的证书。

参考:

维基百科

微软 MSDN

1)

  • 自签名证书使用您的密钥对自己进行签名;没有涉及 CA,没有什么可验证的。证书基本上会验证它是否匹配密钥,但仅此而已,因此它没有真正的验证目的。

  • 您的浏览器会弹出一个自签名证书警告,这意味着该密钥未经任何人认证。这是从哪个键不同认证由CA客户不熟悉(不信任CA),其中客户端必须手动信任CA不明的选项。

2)

在这里,您不使用公钥和私钥,仅使用密钥及其证书,该证书是密钥的签名和元数据。有问题的关键是您的私钥:保持私密。

您向用户提供从您的私钥生成的秘密以及证书(来自证书颁发机构的签名和元数据),其中证书应与从您的密钥生成的秘密相匹配,并告诉客户密钥名称、所有者、有效性和其他元数据。

但是,证书可能是由任何人创建的(只需要匹配密钥),因此客户端仅在证书由主证书(证明证书是权威的)或由证书,其中顶级签名者应受客户端信任,并且整个签名链中的所有签名都必须有效。

顶级证书可能内置在您的客户端(浏览器或通常受信任的安全证书数据库)中,也可能被用户导入和接受。自制但受信任的顶级证书 (CA) 可能会签署密钥,这些密钥将在每个信任该自制 CA 的客户端中进行验证,但在其他客户端中则不然。

Q1 对于公共网站,最安全的方法或唯一安全的方法是使用来自受信任 CA 的证书。但是,在许多情况下,我们可以使用自签名证书来获得与网站的“安全”连接。浏览器根本无法信任 SSC,但它会发出可怕的警告,以防止用户发现可能的不受信任和有风险的站点。

Q2 服务器密钥是私有的,是异步加密的敏感部分,用于签署证书,或者异步加密的公共部分。两者都存储在服务器文件系统中,但只有客户端/浏览器知道用于加密/解密数据的公共部分。

如果您想要 depper,请查看 Ivan Ristic OpenSSL Cook Book