Answers:
证书包含公钥。
该证书除了包含公共密钥外,还包含其他信息,例如颁发者,该证书应用于什么以及其他类型的元数据。
通常,证书本身是由证书颁发机构(CA)使用CA的私钥签名的。这验证了证书的真实性。
openssl
命令可以解码并解析这些内容,或者您可以使用诸如此类的在线实用程序:lapo.it/asn1js
假设公司A有一个密钥对,并且需要发布其公共密钥以供公众使用(在其网站上也称为ssl)。
因此,用有效CA的私钥签名的公司A的公钥称为公司A的证书。
让我举例说明。
在基于普通密钥对的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将这些附加信息发送给服务器,因此客户端可以轻松地知道其是否与服务器进行通信。
好的,让我们分解一下,以便非技术人员可以理解。
这样想吧。证书就像您银行的保险箱一样。它包含许多重要的内容;通常包含您身份的内容。证书具有公共密钥,需要私钥才能将其打开。
您的保险箱也需要两个钥匙才能打开,就像证书一样。
有了保险箱,银行家的钥匙就象公共钥匙一样,因为它留在银行,而公共钥匙则与证书一起留着。您具有私钥,“获取证书”是必需的,在安全保管箱示例中,除了公钥之外,还需要您的私钥。
在实际打开保险箱之前,您必须首先验证您的身份(有点像证书申请);一旦确定身份,便可以使用私钥和公钥打开保险箱。这有点像发出证书请求,然后从证书颁发机构获取证书(只要您可以被识别(可信)并且您拥有正确的密钥)。