就SSL而言,证书和密钥之间有什么区别?


Answers:


114

证书包含公钥。

该证书除了包含公共密钥外,还包含其他信息,例如颁发者,该证书应用于什么以及其他类型的元数据。

通常,证书本身是由证书颁发机构(CA)使用CA的私钥签名的。这验证了证书的真实性。


4
@Zoredache如果证书通常仅具有公共密钥,是否有一个好名字来调用同时包含证书和私钥的.p12或.pfx文件?
drs 2013年

pkcs12是存档格式。它可能包含一个密钥,也可能不包含。通常,在参考特定文件所包含的内容时,或者只是说pkcs12文件时,我通常会尽量保持具体。
Zoredache

2
这些附加信息埋在哪里?我正在查看一些证书,这对我来说
真是

3
您正在查看的乱码是Base64编码。这样做的原因可能与电子邮件附件转换成类似的原因-基本上是为了确保电子邮件附件只能通过为ASCII设计的协议和机制进行传输,而无需进行随意修改,而不必担心换行符,括号等问题。该openssl命令可以解码并解析这些内容,或者您​​可以使用诸如此类的在线实用程序:lapo.it/asn1js
LawrenceC

证书是否由CA或与之通信的服务器签名?
Olshansk

58

这两张照片一起向我解释了一切:

资料来源:linuxvoice

在此处输入图片说明

资料来源:infosecinstitute

在此处输入图片说明



真好 1澄清:第一个图片是标准(1路)TLS身份验证;第二个双向(双向)身份验证。第一个中的1个额外的呼出将进一步帮助解释该信任关系的实际建立方式(在那张看起来更友好的图片中):客户端获取服务器的公钥证书后,客户端将验证签署该证书的CA。服务器的证书包含在客户端的受信任CA的私有列表中(确定它现在也信任该CA)。然后,可以安全地向服务器发送会话密钥,并且每个会话密钥现在都可以加密和解密后续通信。
user1172173

第一个链接到linuxvoice.com/…,给出了证书错误。具有讽刺意味的。
Tobb

37

假设公司A有一个密钥对,并且需要发布其公共密钥以供公众使用(在其网站上也称为ssl)。

  • 公司A必须向证书颁发机构(CA)提出证书请求(CR),以获取其密钥对的证书。
  • 证书请求中包括公司A的密钥对的公钥而不是私钥。
  • 然后,CA使用公司A的身份信息来确定请求是否符合CA颁发证书的标准。
    如果CA批准了该请求,它将向A公司颁发证书。简而言之,CA用其私钥在公司A的公钥上签名,以验证其真实性。

因此,用有效CA的私钥签名的公司A的公钥称为公司A的证书。


公司A点是否将其(公司A)的私钥与(公司A)证书关联?
Tola Odejayi 2016年

第一个私钥仍然是A.女贞
穆赫辛Heydari的

那么,公司A的私钥在哪里使用?
sivann

2
经过以上手续。公司A在其网站上将具有有效的SSL证书。与网站进行通信的任何访问者(浏览器)都将使用证书公钥来加密其消息。具有SSL证书私钥的公司A是唯一可以解密消息的公司。
Mohsen Heydari '17

我猜公司A是男性。
DimiDak

5

让我举例说明。

在基于普通密钥对的PKI中,有私钥和公钥。

在基于证书的系统中,有私钥和证书。证书比公钥拥有更多的信息。

演示(您可以生成证书和私钥):http : //www.selfsignedcertificate.com/

您可以下载打开私钥文件和证书文件,您会看到证书文件包含很多信息,如下所示。 在此处输入图片说明 在此处输入图片说明

您可以从以下站点匹配生成的证书(由文本编辑器打开)和私钥(由文本编辑器打开):https : //www.sslshopper.com/certificate-key-matcher.html

如果证书与客户端的私钥匹配,则客户端可以确定该证书是由客户端提供的还是由客户端的可信代理(CA)给出的。

但是,仅私钥和基于证书的通信存在问题

因为任何人都可以生成自己的证书和私钥,所以简单的握手不会证明有关服务器的任何信息,除非服务器知道与证书的公钥匹配的私钥。解决此问题的一种方法是让客户端拥有一组它信任的一个或多个证书。如果证书不在集合中,则服务器将不受信任

这种简单方法有几个缺点。服务器应该能够随着时间的推移升级到更强的密钥(“密钥轮换”),从而用新的密钥替换证书中的公共密钥。不幸的是,由于本质上是服务器配置的更改,现在必须更新客户端应用程序。如果服务器不受应用程序开发人员的控制(例如,如果它是第三方Web服务),则这尤其成问题。如果该应用程序必须与任意服务器(例如Web浏览器或电子邮件应用程序)进行通信,则此方法也存在问题。

为了解决这些缺点,服务器通常配置有来自知名发行者的证书,称为证书颁发机构(CA)。主机平台(客户端)通常包含它信任的知名CA的列表。与服务器类似,CA具有证书和私钥。在为服务器颁发证书时,CA使用其私钥对服务器证书进行签名。然后,客户端可以验证服务器是否具有平台已知的CA颁发的证书。

但是,在解决一些问题的同时,使用CA会引入另一个问题。由于CA为许多服务器颁发证书,因此您仍然需要某种方法来确保与所需服务器进行通信。为了解决这个问题,CA颁发的证书使用特定名称(例如gmail.com)或一组通配的主机(例如* .google.com)来标识服务器。

以下示例将使这些概念更加具体。在下面命令行的摘录中,openssl工具的s_client命令查看Wikipedia的服务器证书信息。它指定端口443,因为这是HTTPS的默认端口。该命令将openssl s_client的输出发送到openssl x509,后者根据X.509标准格式化有关证书的信息。具体来说,该命令要求提供包含服务器名称信息的主题和标识CA的颁发者。

$ openssl s_client -connect wikipedia.org:443 | openssl x509 -noout -subject -issuer
subject= /serialNumber=sOrr2rKpMVP70Z6E9BT5reY008SJEdYv/C=US/O=*.wikipedia.org/OU=GT03314600/OU=See www.rapidssl.com/resources/cps (c)11/OU=Domain Control Validated - RapidSSL(R)/CN=*.wikipedia.org
issuer= /C=US/O=GeoTrust, Inc./CN=RapidSSL CA

您可以看到RapidSSL CA为与* .wikipedia.org匹配的服务器颁发了证书。

如您所见,由于CA将这些附加信息发送给服务器,因此客户端可以轻松地知道其是否与服务器进行通信。


3

SSL 证书是从受信任的证书颁发机构获得的,该证书可保证网站的安全连接。SSL证书通常包含身份验证徽标以及加密和解密要发送到计算机的数据所需的公用密钥。SSL密钥功能

会话期间可以生成几个SSL 密钥。它们用于对发送到计算机和从计算机发送的信息进行加密和解密。密钥用于验证信息是否已被修改或篡改。

生命周期差异

证书的持续时间长于SSL密钥。SSL证书是从证书颁发机构获得的,可以由银行和企业定期更新。另一方面,SSL密钥或会话密钥是在会话期间唯一生成的,并在会话结束时被丢弃。

在这里阅读更多


2

好的,让我们分解一下,以便非技术人员可以理解。

这样想吧。证书就像您银行的保险箱一样。它包含许多重要的内容;通常包含您身份的内容。证书具有公共密钥,需要私钥才能将其打开。

您的保险箱也需要两个钥匙才能打开,就像证书一样。
有了保险箱,银行家的钥匙就象公共钥匙一样,因为它留在银行,而公共钥匙则与证书一起留着。您具有私钥,“获取证书”是必需的,在安全保管箱示例中,除了公钥之外,还需要您的私钥。

在实际打开保险箱之前,您必须首先验证您的身份(有点像证书申请);一旦确定身份,便可以使用私钥和公钥打开保险箱。这有点像发出证书请求,然后从证书颁发机构获取证书(只要您可以被识别(可信)并且您拥有正确的密钥)。


3
<PiratesOfTheCarribean>所以我们要去找这个键!</ PiratesOfTheCarribean>(阅读:您根本没有任何道理...)
Timo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.