每当我尝试了解有关SSL的任何内容时,我总是很难跟踪“密钥”和“证书”指的是什么。我担心许多人会错误或互换使用它们。密钥和证书之间有标准区别吗?

评论

用于SSL的证书很大程度上基于PKI en.wikipedia.org/wiki/Public-key_cryptography

#1 楼

证书包含公钥。

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

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

评论


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

–drs
13年7月15日在18:54



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

– Zoredache
13年7月15日在19:08

这些附加信息埋在哪里?我在看一些证书,这对我来说简直是胡言乱语

–科迪·布格斯坦(CodyBugstein)
2015年12月4日,下午3:39

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

– LawrenceC
16-09-25在22:07



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

–奥尔尚斯克
17 Mar 29 '17在2:54



#2 楼

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

来源:linuxvoice



来源:infosecinstitute



评论


相关xkcd

–SIGSTACKFAULT
18年4月14日在16:44

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

–galaxis
18-10-13在18:04

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

– Tobb
19年4月29日在12:32

#3 楼

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


公司A必须向证书颁发机构(CA)提出证书请求(CR),以获得其密钥对的证书。

公钥,但证书要求中包括公司A的密钥对的私钥,但不包括私钥。

然后,CA使用公司A的身份信息来确定请求是否满足CA颁发证书的标准。如果CA批准了该请求,它将向A公司颁发证书。简而言之,CA用其CA私钥在A公司的公钥上签名,以验证其真实性。


所以公司用有效CA的私钥签名的A的公钥称为公司A的证书。

评论


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

– Tola Odejayi
16年2月11日在21:09

不可以。私钥仍然是A的私有密码。

– Mohsen Heydari
16年2月12日,0:25

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

– sivann
17年5月23日在9:13

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

– Mohsen Heydari
17年5月23日在20:14

我猜公司A是男性。

– DimiDak
18年2月2日在16:54

#4 楼

让我举例说明。

在基于普通密钥对的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将这些附加信息发送给服务器,因此客户端可以轻松地知道它是在与服务器通信还是在与服务器通信。不是。

#5 楼

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

在此过程中可能会生成多个SSL密钥。一个会话。它们用于对发送到计算机和从计算机发送的信息进行加密和解密。密钥用于验证信息是否已被修改或篡改。

生命周期差异

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

此处更多内容

#6 楼

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

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

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

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

评论


所以我们要去找这个键!(阅读:您根本没有任何道理...)

– Timo
16年6月23日在13:45