在编程中,HTTP和HTTPS有什么区别?

7

我刚刚知道"s"代表"Secure",用户不应该在只使用http的网站上输入重要信息。但我真的想知道这两种协议如何影响我的编程,例如:

  • 为什么有些网站有"https"而有些没有(或者它们如何开启和关闭此功能,我不知道)。这是否意味着我必须在某个地方注册?

  • 我认为http通信不加密,而https可能会进行一些加密,这是正确的吗?

  • 由于加密(如果有)过程由浏览器完成,因此我的服务器端代码与"http"或"https"无关,这是正确的吗?

  • 有办法强制用户仅使用https吗?


1
这与编程无关,它是一种传输协议。 - Kermit
2个回答

8
  • 使用HTTPS协议的网站使用由可信第三方(或“证书颁发机构”)颁发的包含公钥的证书(参见:公钥基础设施)。公钥与私钥配对,使用私钥加密的信息只能使用公钥解密。这用于确认服务器是私钥的持有者(因此是证书颁发机构认证的实体)。要使用HTTPS协议,您必须生成或购买证书。出于各种原因,购买证书比生成证书更为常见。

  • HTTPS通信是加密的。与证书相关联的密钥不进行加密,而是浏览器和服务器使用诸如Diffie-Hellman Exchange之类的方案来生成用于加密通信的密钥。这很重要,因为任何拥有公钥的人都可以解密使用私钥加密的内容。

  • 从浏览器发送的信息由浏览器加密,由服务器解密。您的Web服务器软件将解密信息;接收到的信息与标准HTTP流量没有区别。

  • 是的,您可以强制使用HTTPS。您可以通过服务器软件(例如,在Apache中使用RewriteRule,并使用RewriteCond检查HTTPS)或通过HSTS来实现。如果在支持HSTS的浏览器中发送HSTS标头,则浏览器将自动从HTTP重定向到HTTPS(参见:HTTP Strict Transport Security)。


4

为了启用HTTPS,您需要在Web服务器上安装SSL证书。这将允许客户端浏览器和服务器之间建立加密连接,并且所有HTTP流量都将被加密。该证书由受信任的机构颁发。您也可以生成用于测试目的的证书,但是当客户端浏览器导航到网站时,它会发出警告,指出此证书未经受信任的机构颁发。

通过配置Web服务器自动将所有HTTP请求重定向到相应的HTTPS端点,可以强制使用HTTPS。

您可以查找SSL/TLS


该证书由可信任的机构颁发。信任并不一定是通过付费关系建立的,例如购买证书。在广泛的互联网上,根CA证书通常分布在广泛的用户群中,但也有一些情况(例如几年前的InCommon),即使没有浏览器中的适当根证书,甚至一般的机构也可能不存在。内部网络相关证书是另一个“受信任的机构”条件。只是想要“澄清”这个有争议的观点。 - Jared Farrish
是的,没错。你也可以自己生成 SSL 证书,并将其安装到客户端浏览器的信任证书存储中,这样甚至都不会出现警告。只是当在互联网上设计一个网站时,你无法控制你的客户端浏览器,如果你不从可信机构购买 SSL 证书,客户端浏览器总是会收到证书不受信任的警告。 - Darin Dimitrov
我明白。:) 我只是想让阅读这篇答案的人们明白,可信证书机构并不是一回事。这是一个常见的误解,因此我在评论中提醒阅读者。 - Jared Farrish

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