HTTPS协议与SSL证书的区别

53
HTTPS协议和Web浏览器中使用的SSL证书有什么区别?
这两者不都是用来加密客户端(浏览器)和服务器之间的通信吗?

假设已经在SSL端口(https)上运行了一个Web应用程序。为什么您要为此Web应用程序获取证书呢? - user32262
4个回答

54

HTTPS是HTTP(超文本传输协议)加上SSL(安全套接字层)。要使用任何使用SSL的协议,您需要一张证书。

SSL允许以安全方式通信。它使客户端能够(a)验证它们正在与期望的服务器进行通信而不是中间人,并且(b)加密网络流量,以便除客户端和服务器之外的其他方无法看到通信。

SSL证书包含公钥和证书颁发者。客户端不仅可以使用证书与服务器通信,还可以验证该证书是否由官方证书颁发机构进行了加密签名。例如,如果您的浏览器信任VeriSign证书颁发机构,并且VeriSign签署了我的SSL证书,则您的浏览器将固有地信任我的SSL证书。

这里有一些好的阅读材料:http://en.wikipedia.org/wiki/Transport_Layer_Security


3
“使用任何使用SSL的协议都需要证书。”:不是这样的!请参见Jon Weldon在下面给出的非常准确和有见识的答案。 - Jean-François
1
@Jean-François,实际上,John Weldon的答案并不特别准确。首先,严格来说,您不需要证书来使用SSL/TLS(请参阅PSK、Kerberos甚至匿名密码套件)。其次,严格来说,没有所谓的“SSL证书”:它大多数时候是带有正确属性/扩展名的X.509证书,可用于SSL/TLS。此外,在SSL中,证书不仅限于验证服务器,还可以用于验证客户端(在使用此配置时)。 - Bruno
请重新阅读我上面的评论。我说不需要证书!我同意它们是X.509证书,但由于大多数人将其称为SSL证书,让我们简单地称之为SSL证书。对于一个一般性的答案,Jon Weldon的回答没有你的学术性那么强,但仍然是一个好的回答。 - Jean-François

38

一种解决方案的两个组成部分。

https是协议,它定义了客户端和服务器如何协商建立安全连接。

SSL证书是双方用来确认服务器身份的文件。


6

HTPS是新的HTTPS。 HTTPS极易受到SSL剥离/中间人攻击的威胁。 引用亚当·兰格利(谷歌)的博客imperial violet:

“HTTPS倾向于导致人们嘲笑证书安全和周围生态系统。”

问题在于该页面未通过HTTPS提供服务。本应如此,但是当用户在浏览器中键入主机名时,默认方案为HTTP。服务器可能会尝试将用户重定向到HTTPS,但该重定向不安全:MITM攻击者可以重写它并使用户保持在HTTP上,整个时间欺骗真实网站。攻击者现在可以截取所有流向此完全配置良好且安全的网站的流量。

这称为SSL剥离,它非常简单且具有毁灭性的效果。我们可能很少看到它,因为企业代理不需要执行此操作,因此它不在现成设备中。但是这种喘息很可能不会持续太久,也许已经结束了:如果正在使用,我们又怎么知道呢?

为了防止SSL剥离,我们需要使HTTPS成为唯一的协议。我们无法为整个互联网做到这一点,但我们可以使用HTTP Strict Transport Security(HSTS)逐个站点进行。

HSTS会告诉浏览器,总是使用HTTPS向HSTS站点发出请求。站点通过内置于浏览器中或广告头部来成为HSTS站点:
Strict-Transport-Security: max-age=8640000; includeSubDomains
该标题对给定的秒数有效,并且也可能适用于所有子域。必须通过干净的HTTPS连接接收标题。
一旦浏览器知道站点仅支持HTTPS,用户输入mail.google.com即是安全的:初始请求使用HTTPS,没有攻击者可以利用的漏洞。
(mail.google.com和许多其他站点已经作为Chrome的HSTS站点内置,因此实际上无法使用Chrome通过HTTP访问accounts.google.com - 我必须修改该图像!如果要包含在Chrome内置的HSTS列表中,请给我发电子邮件。)
HSTS还可以保护您,网站管理员,免受愚蠢错误的影响。假设您告诉您的母亲她应该始终在访问银行网站之前键入https://,或者您为她设置了一个书签。这实在是我们不能或不应该期望我们的用户做到的更多。但是假设我们的超额用户... ]
因为在stackoverflow上新用户的链接规则非常难懂/愚蠢,我无法给出Adam答案的其余部分,你需要自己访问Adam Langley的博客https://www.imperialviolet.org/2012/07/19/hope9talk.html
"Adam Langley同时负责谷歌的HTTPS服务基础设施和Google Chrome的网络堆栈。"

3
"HTPS",你是不是指的是"HSTS"?无论如何,“HTTPS非常容易受到SSL剥离/中间人攻击(MITM)”这种说法是不准确的。虽然HSTS是整个系统中一个受欢迎的补充,但它仍然使用HTTPS。HTTPS并不容易受到SSL剥离攻击,问题在于人们如何使用链接和检查证书。 - Bruno

1

HTTPS是一个应用层协议。它可以通过数字签名提供单个请求或响应的不可否认性。

SSL是一个较低级别的协议,没有这种能力。SSL是传输级别加密。

HTTPS比SSL更灵活:应用程序可以配置所需的安全级别。SSL选项较少,因此设置和管理更容易。


1
非否认性是指确保合同或通信的一方不能否认其在文件上签名或发送其起源消息的真实性的能力。 - Smriti Snigdho Pal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接