关于 https 连接的方式和原因,我几乎一无所知。显然,当我传输密码等安全数据或特别是信用卡信息时,https 是一个关键工具。但是,我需要了解什么?你看到开发人员在他们的项目中实现它时最常见的错误是什么?是否有时 https 只是个坏主意?谢谢!
最佳答案
为站点提供 HTTPS 或安全套接字层 (SSL) 证书,并且通常由证书颁发机构 (CA) 签名,该证书实际上是受信任的第 3 方,可验证有关站点的一些基本详细信息,并对其进行认证以供使用在浏览器中。如果您的浏览器信任 CA,那么它就会信任由该 CA 签署的任何证书(这称为信任链)。
每个 HTTP(或 HTTPS)请求由两部分组成:请求和响应。当您通过 HTTPS 请求某些内容时,实际上会在后台发生一些事情:
如果连接保持打开状态,则每个连接都将使用相同的对称 key 。
如果建立了新连接,并且双方仍然拥有主 key ,则可以在“缩写握手”中生成新的 session key 。通常,浏览器将存储主 key 直到它关闭,而服务器将存储它几分钟或几个小时(取决于配置)。
有关 session 长度的更多信息,请参阅 How long does an HTTPS symmetric key last?
证书和主机名
证书被分配了一个通用名称 (CN),对于 HTTPS,它是域名。 CN 必须完全匹配,例如,CN 为“example.com”的证书将不匹配域“www.example.com”,并且用户将在其浏览器中收到警告。
之前 SNI ,不可能在一个 IP 上托管多个域名。因为证书是在客户端甚至发送实际 HTTP 请求之前获取的,并且 HTTP 请求包含 Host: header 行,该行告诉服务器要使用的 URL,服务器无法知道为给定的证书提供服务要求。 SNI 将主机名添加到 TLS 握手的一部分,因此只要客户端和服务器都支持它(并且在 2015 年,它被广泛支持)那么服务器就可以选择正确的证书。
即使没有 SNI,提供多个主机名的一种方法是使用包含主题备用名称 (SAN) 的证书,SAN 本质上是证书对其有效的附加域。例如,谷歌使用单一证书来保护它的许多网站。
另一种方法是使用通配符证书。有可能获得像“.example.com”这样的证书,在这种情况下,“www.example.com”和“foo.example.com”都对该证书有效。但是,请注意“example.com”与“.example.com”不匹配,“foo.bar.example.com”也不匹配。如果您使用“www.example.com”作为您的证书,您应该将“example.com”中的任何人重定向到“www”。地点。如果他们要求 https://example.com , 除非您将其托管在单独的 IP 上并拥有两个证书,否则将收到证书错误。
当然,您可以混合使用通配符和 SAN(只要您的 CA 允许您这样做)并获得“example.com”和带有 SAN 的证书“.example.com”、“example.net”和“.example.net”,例如。
表格
严格来说,如果您正在提交表单,则表单页面本身是否未加密并不重要,只要提交 URL 转到 https://URL 即可。实际上,用户已经接受过培训(至少在理论上)除非他们看到小“锁定图标”,否则不要提交页面,因此即使是表单本身也应该通过 HTTPS 提供服务以获取此信息。
流量和服务器负载
HTTPS 流量比其等效的 HTTP 流量大得多(由于加密和证书开销),并且它也给服务器带来了更大的压力(加密和解密)。如果您的服务器负载很重,则可能需要非常有选择性地选择使用 HTTPS 提供的内容。
最佳实践
关于php - PHP 开发人员需要了解哪些有关 https/安全套接字层连接的知识?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64631/